it-roy-ru.com

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

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

import sys
print sys.argv[1]

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

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

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

blah.py argument

возникает ошибка:

IndexError ...

Так что аргументы не переходят в сценарий.

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

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

88
ton4eg

Когда вы запускаете сценарий без ввода «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

137
Peter Hansen

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

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

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

22
santosc

Кроме того, если вы хотите иметь возможность запускать свои сценарии Python без ввода .py (или .pyw) в конце имени файла, вам необходимо добавить .PY (или .PY;.PYW) в список расширений в переменной среды PATHEXT.

В Windows 7:

щелкните правой кнопкой мыши на компьютере
левый клик Свойства
щелкните левой кнопкой мыши Дополнительные параметры системы
щелкните левой кнопкой мыши на вкладке «Дополнительно».
щелкните левой кнопкой мыши Переменные среды ...
под "системными переменными" прокрутите вниз, пока не увидите PATHEXT
щелкните левой кнопкой мыши на PATHEXT, чтобы выделить его
щелкните левой кнопкой мыши Изменить ...
Отредактируйте «Значение переменной», чтобы оно содержало ;.PY (клавиша End пропустит до конца)
щелкните левой кнопкой мыши ОК
щелкните левой кнопкой мыши ОК
щелкните левой кнопкой мыши ОК

Примечание # 1: окна командной строки не увидят изменения без закрытия и повторного открытия.

Примечание № 2: разница между расширениями .py и .pyw заключается в том, что первый при запуске открывает командную строку, а второй - нет.

На моем компьютере я добавил ;.PY;.PYW в качестве последнего расширения (с самым низким приоритетом), поэтому значения PATHEXT «до» и «после» были следующими:

до: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

после .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

Вот несколько поучительных команд:

C:\>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

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

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

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

C:\>ftype Python.NoConFile
Python.NoConFile="C:\Python32\pythonw.exe" "%1" %*

C:\>type c:\windows\helloworld.py
print("Hello, world!")  # always use a comma for direct address

C:\>helloworld
Hello, world!

C:\>
15
Dave Burton

Я столкнулся с той же проблемой, но в связи с необходимостью упаковки своего кода для пользователей Windows (из Linux)…. Мой пакет содержит несколько сценариев с параметрами командной строки.

Мне нужно, чтобы эти сценарии были установлены в соответствующем месте на компьютерах пользователей Windows, чтобы они могли вызывать их из командной строки ........ Поскольку пакет предположительно удобен для пользователя, я прошу моих пользователей изменить свой реестр для запуска этих сценариев. было бы невозможно.

Я наткнулся на решение, которое ребята из Continuum используют для сценариев Python, которые поставляются с их пакетом Anaconda - посмотрите примеры в каталоге Anaconda/Scripts.

Для скрипта Python test создайте два файла: test.bat и test-script.py.

test.bat выглядит следующим образом (файлы .bat в Anaconda\Scripts вызывают python.exe с относительным путем, который я адаптировал для своих целей):

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.py - это ваш настоящий скрипт на Python:

import sys
print sys.argv

Если вы оставите эти два файла в своем локальном каталоге, вы можете вызвать скрипт Python через файл .bat, выполнив

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

Если вы скопируете оба файла в папку, которая находится в PATH (например, Anaconda\Scripts), вы можете даже запустить свой сценарий, пропустив суффикс .bat

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

Отказ от ответственности: я понятия не имею, что происходит и как это работает, и поэтому был бы признателен за любое объяснение.

4
user2042696

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

Вы можете установить pylauncher . Он используется для запуска файлов .py, .pyw, .pyc, .pyo и поддерживает несколько установок Python:

T\:> blah.py argument

Вы можете запустить скрипт Python без указания расширения .py, если у вас есть .py, .pyw в переменной среды PATHEXT:

T:\> blah argument

Добавлена ​​поддержка Shebang (строка заголовка #!) для выбора нужной версии Python в Windows, если у вас установлено несколько версий. Вы можете использовать * nix-совместимый синтаксис #! /usr/bin/env python.

Вы можете явно указать версию, например, для запуска с использованием последней установленной версии Python 3:

T:\> py -3 blah.py argument

Это также должно исправить вашу проблему sys.argv как побочный эффект.

4
jfs

On Windows

To запустить модуль python без ввода "python" ,

-> Щелкните правой кнопкой мыши по любому файлу python (*. Py)

-> Установите для свойства open значение "python.exe" 

-> Отметьте «всегда использовать эту программу для файлов этого типа»

-> Добавить путь к python.exe к переменной среде, например. добавить C:\Python27 к переменной окружения PATH.

To Запустить модуль Python без ввода расширения ".py"

-> Редактировать системную переменную PATHEXT и добавить расширение «.PY» в список.

2
Ashfaq Memon

Нашел невероятно полезный ответ здесь : Как запустить разные версии Python в cmd?

Я бы предложил использовать утилиту Python Launcher для Windows, которая была представлена ​​в Python 3.3 некоторое время назад. Вы также можете вручную загрузить и установить его прямо с сайта автора для использования с более ранними версиями Python 2 и 3.

Независимо от того, как вы его получите, после установки он будет связан со всеми стандартными расширениями файлов Python (т.е. файлами .py, .pyw, .pyc и .pyo). Вы сможете не только явно контролировать, какая версия используется в командной строке, но также и по сценарию за сценарием, добавив Linux/Unix-y Shebang #!/Usr/bin/env pythonX комментарии на начало ваших скриптов Python.

Как полагает Дж.Ф. Себастьян, Python Launcher для Windows является лучшим выбором по умолчанию для запуска другой версии Python в Windows. Раньше это был сторонний инструмент, но теперь он официально поддерживается начиная с Python 3.3.

Новое в версии 3.3.

Средство запуска Python для Windows - это утилита, которая помогает найти и запустить различные версии Python. Он позволяет сценариям (или командной строке) указывать предпочтения для конкретной версии Python, а также находит и выполняет эту версию.

Это отличный инструмент, просто используйте его!

1
laike9m

Если это то, что я понял, это так:

C:\Users\(username)\AppData\Local\Programs\Python\Python(version)

Скопируйте (не удаляйте) python.exe и переименуйте в py.exe и выполните:

py filename.py
0
Lucas Paz

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

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

Правка:

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

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

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

python C:\Somedir\blah.py

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

0
Luka Rahne

Просто запустите команду:

C:>python .\file_name.py

Предполагая, что имя файла находится в той же папке, и Python уже добавлен в переменные окружения.

0
Mwizak