Как выполнить сценарии Python в Windows?

У меня есть простой сценарий blah.py (использование Python 2):

import sys
print sys.argv[1]

Если я выполняю свой сценарий:

python c:/..../blah.py argument

Это печатает аргумент, но если я выполняю сценарий:

blah.py argument

ошибка происходит:

IndexError...

Таким образом, аргументы не передают сценарию.

python.exe в ПУТИ. Папка с blah.py также в ПУТИ.
python.exe является программой по умолчанию для выполнения *.py файлов.

В чем проблема?

92
задан fklappan 8 June 2016 в 07:00
поделиться

3 ответа

Когда вы выполняете сценарий без ввода «python», вам нужно знать две вещи о том, как Windows вызывает программу. Во-первых, необходимо выяснить, что это за файл, по мнению Windows:

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

Затем вам нужно знать, как Windows выполняет что-то с этим расширением. Он связан с типом файла «Python.File», поэтому эта команда показывает, что он будет делать:

    C:\>ftype Python.File
    Python.File="c:\python26\python.exe" "%1" %*

Итак, на моем компьютере, когда я набираю «blah.py foo», он выполнит именно эту команду, без разницы в результатах, чем если бы я сам набрал все:

    "c:\python26\python.exe" "blah.py" foo

Если вы наберете то же самое, включая кавычки, вы получите результаты, идентичные результатам, когда вы просто набираете «blah.py foo». Теперь вы можете сами решить остальную часть своей проблемы.

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

Получено из комментариев:

Даже если assoc и ftype отображают правильную информацию, может случиться так, что аргументы будут удалены. Что может помочь в этом случае, так это непосредственное исправление соответствующих ключей реестра для Python. Установите для ключа

HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command

значение:

"C:\Python26\python26.exe" "%1" %*

Вероятно, ранее % * отсутствовал. Точно так же установите

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

на то же значение. См. http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

example registry setting for python.exe HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command Путь в реестре может отличаться, используйте python26.exe или python.exe или то, что уже есть в реестре.

enter image description here HKEY_CLASSES_ROOT \ py_auto_file \ shell \ open \ command

142
ответ дан 24 November 2019 в 06:28
поделиться

вы должны сделать приложение по умолчанию для обработки файлов python python.exe.

щелкните правой кнопкой мыши файл * .py, выберите диалоговое окно «Открыть с помощью». Там выберите "python.exe" и отметьте "всегда использовать эту программу для этого типа файла" (что-то вроде этого).

тогда ваши файлы python всегда будут запускаться с использованием python.exe

22
ответ дан 24 November 2019 в 06:28
поделиться

Можете ли вы запустить python.exe с любой карты? Если вы этого не сделаете, проверьте, есть ли у вас правильные значения для python.exe в среде PATH

. Вы находитесь в том же каталоге, что и blah.py. Проверьте это, введя команду -> отредактируйте blah.py и проверьте, можете ли вы открыть этот файл

РЕДАКТИРОВАТЬ:

В этом случае вы не можете. ( python arg означает, что вы вызываете python.exe с некоторыми параметрами, которые python предполагает, что это имя файла сценария, который вы хотите запустить)

Вы можете создать файл bat с строками в вашем карту пути и запустите .bat файл

Пример:
На одной из карт Path создайте blah.py.bat Отредактируйте файл и поместите строку

python C:\Somedir\blah.py

Теперь вы можете запускать blah.py из любого сервера, поскольку вам не нужно добавлять расширение .bat при запуске файлов bat

0
ответ дан 24 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: