Как выполнить скрипты Python в Windows? - PullRequest
91 голосов
/ 20 декабря 2009

У меня есть простой скрипт 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 файлов.

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

Ответы [ 10 ]

140 голосов
/ 20 декабря 2009

Когда вы выполняете скрипт, не набирая «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

22 голосов
/ 20 декабря 2009

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

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

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

15 голосов
/ 23 октября 2012

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

В Windows 7:

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

Примечание # 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:\>
4 голосов
/ 21 ноября 2013

Я столкнулся с той же проблемой, но в связи с необходимостью упаковки моего кода для пользователей 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 голосов
/ 23 октября 2012

Как выполнять скрипты 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 как побочный эффект.

2 голосов
/ 23 июня 2015

Вкл Windows ,

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

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

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

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

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

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

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

1 голос
/ 16 марта 2014

Нашел невероятно полезный ответ здесь : Как запустить разные версии 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, а также находит и выполняет эту версию.

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

0 голосов
/ 16 августа 2018

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

C:>python .\file_name.py

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

0 голосов
/ 01 июля 2018

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

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

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

py filename.py
0 голосов
/ 20 декабря 2009

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

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

EDIT:

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

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

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

python C:\Somedir\blah.py

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

...