Python Script, аргументы не переданы в Script
У меня есть скрипт 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 ответа
Причина, по которой вы не получаете параметры, заключается в том, что вы разорвали связь.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", происходит несколько вещей.
Сначала переменная окружения PATHEXT используется для поиска подходящего расширения. В вашем случае он обнаруживает, что имя вашей команды "gcc_opt" + .PYW приводит к соответствующему файлу.
Затем ищется ассоциация для файлов.PYW, которая находит тип файла Python.NoConFile, который в вашем случае имеет значение "python.exe" (предполагается, что это pythonw.exe). (Вы можете увидеть их в реестре в разделе HKEY_CLASSES_ROOT.)
Затем система создает фактическую командную строку из шаблона команды, найденного для этого типа файла, который в вашем случае, вероятно,
"[your-python-path]python.exe" "%1"
Это говорит о том, что нужно использовать только первый параметр, имя вашего скрипта python "gcc_opt.pyw".
Быстрое решение состоит в том, чтобы добавить %*
до конца этой команды.
ПРАВИЛЬНОЕ исправление будет состоять в том, чтобы вернуть вещи в правильные ассоциации и открыть файлы Python для редактирования более стандартным методом (перетащите значок на NotePad ++ или, возможно, щелкните правой кнопкой мыши и отредактируйте с помощью NotePad++).
Вы должны переименовать его в.py.
.pyw предназначен для использования в приложениях с графическим интерфейсом, потому что им не нужно консольное окно.