Python Script, аргументы не переданы в Script - PullRequest
3 голосов
/ 23 сентября 2011

У меня есть скрипт Python под названием "gcc_opt.pyw", и я включил его каталог в переменную среды Windows PATH.

Но ни один аргумент командной строки не передается в скрипт. Распечатка sys.argv говорит мне, что в списке argv есть только имя файла.

Эта команда:

gcc_opt HelloWorld.c -o HelloWorld.exe -shared

результаты в

["C:\\Scripts\\gcc_opt.pyw"]

Можете ли вы сказать мне, почему нет других аргументов?

Я не знаю, важно ли это, но я установил python.exe в качестве программы по умолчанию для выполнения файлов .pyw, поскольку я не вижу распечаток с использованием pythonw.exe (почему это так).

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

Причина, по которой вы не получаете параметры, заключается в том, что вы разорвали связь .py, чтобы дважды щелкнуть эти файлы, чтобы открыть их в NotePad ++, а затем разорвали связь .pyw, чтобы сделать то, что должен делать .py.

Короче говоря, вы забыли включить %* в конце командной строки Python.exe для вашей "настроенной" (искаженной) ассоциации .pyw.

ASSOC и FTYPEКоманды используются для отображения ассоциаций и типов файлов, т. е. какая программа запускается для обработки файла с определенным расширением.Вот что эти команды производят в моей системе:

C:\test>assoc .py
.py=Python.File

C:\test>assoc .pyw
.pyw=Python.NoConFile

C:\test>ftype python.file
python.file="C:\Python27\python.exe" "%1" %*

C:\test>ftype python.noconfile
python.noconfile="C:\Python27\pythonw.exe" "%1" %*

Обычная ассоциация .py запускает python.exe с окном консоли, чтобы вы могли видеть выходные данные операторов print.

обычный .pyw Ассоциации запускает pythonw.exe без консольного окна.

В конце каждой командной строки вы можете увидеть %*.Это то, что отправляет параметры в команду.(На самом деле, %1 является первым параметром, а %* означает «все остальные параметры».)

Когда вы пытаетесь запустить файл python из командной строки без ввода его расширения или начального «python»msgstr "команда, происходит несколько вещей.

Сначала переменная окружения PATHEXT используется для поиска подходящего расширения.В вашем случае он находит, что имя вашей команды "gcc_opt" + .PYW приводит к соответствующему файлу.

Затем ищется ассоциация для файлов .PYW, которая находит тип файла Python.NoConFile, который в вашем случаеустановлено значение "python.exe" (предполагается, что это pythonw.exe).(Вы можете увидеть их в реестре в разделе HKEY_CLASSES_ROOT.)

Затем система создает фактическую командную строку из шаблона команды, найденного для этого типа файла, который в вашем случае, вероятно, равен

"[your-python-path]python.exe" "%1"

Это говорит о том, что нужно использовать только первый параметр, имя вашего скрипта Python "gcc_opt.pyw".

Быстрое исправление заключается в добавлении %* в конец этой команды.

Исправление CORRECT - возвращение правильных ассоциаций и открытие файлов Python для редактирования с помощьюболее стандартный метод (перетащите значок на NotePad ++ или, может быть, щелкните правой кнопкой мыши и отредактируйте с помощью NotePad ++).

2 голосов
/ 23 сентября 2011

Вы должны переименовать его в .py.

.pyw предназначен для использования в приложениях с графическим интерфейсом, потому что им не нужно консольное окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...