У меня есть простой сценарий 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 файлов.
В чем проблема?
Когда вы выполняете сценарий без ввода «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/
HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command
Путь в реестре может отличаться, используйте python26.exe
или python.exe
или то, что уже есть в реестре.
вы должны сделать приложение по умолчанию для обработки файлов python python.exe.
щелкните правой кнопкой мыши файл * .py, выберите диалоговое окно «Открыть с помощью». Там выберите "python.exe" и отметьте "всегда использовать эту программу для этого типа файла" (что-то вроде этого).
тогда ваши файлы python всегда будут запускаться с использованием python.exe
Можете ли вы запустить 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