2009-12-20 5 views
80

У меня есть простой скрипт blah.py (с помощью Python 2):Как выполнить скрипты Python в Windows?

import sys 
print sys.argv[1] 

Если я исполню мой скрипт:

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

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

blah.py argument 

ошибка:

IndexError ...

Поэтому аргументы не передаются скрипту.

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

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

+2

публикация фрагмента кода может помочь нам вам помочь. – jldupont

+0

Человек без кристаллического шара уже дал решение =) print sys.argv [1] производит эту ошибку. – ton4eg

+0

Если у вас установлено несколько версий Python, вам может понадобиться http://stackoverflow.com/questions/1934675/how-to-execute-python-scripts-in-windows/#22439338. – laike9m

ответ

127

При выполнении сценария без ввода «питон» впереди, вы должны знать две вещи о том, как 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 

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

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

привезен из Комментариев:.

Даже если ассоциативные и 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

+27

Даже если '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/ – parvus

+4

@parvus Ваш комментарий был для меня окончательным решением. Даже с правильными показаниями ассоциаций эти две клавиши были неправильно установлены. –

+1

У меня также возникли проблемы с HKEY_CLASSES_ROOT \ .py \ OpenWithProgids, которые были связаны с чем-то связанным VisualStudio, особенно когда я пытаюсь запустить скрипты Python в тестах AppVeyor. См. Http://help.appveyor.com/discussions/problems/2569-latest-appveyor-build-platform-update-introduced-a-python-problem. –

0

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

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

EDIT:

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

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

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

python C:\Somedir\blah.py 

Y ou теперь может запускать blah.py от anywere, потому что вам не нужно класть расширение .bat при запуске файлов bat.

+0

python в PATH. И каталог, который содержит blah.py также в PATH. Основная идея заключается в выполнении сценария python без написания полного пути к нему. Но теперь у меня проблемы с передачей аргументов. – ton4eg

+3

Ralu, вам не нужен пакетный файл для выполнения сценария python таким образом. Используйте среду pATHEXT var, чтобы включить .py и .pyw в качестве исполняемых расширений. Этот var - это то, почему вам не нужно указывать .bat. – Todd

21

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

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

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

13

Кроме того, если вы хотите, чтобы иметь возможность запускать питон сценарии без ввода .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:\> 
3

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

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

T\:> blah.py argument 

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

T:\> blah argument 

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

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

T:\> py -3 blah.py argument 

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

+0

Python Launcher находится в состоянии бета-версии. –

+0

@NicolasBarbulesco: [Пусковая установка Python включена в Python 3.3] (https://docs.python.org/3/using/windows.html#python-launcher-for-windows), то есть достаточно хорошо – jfs

+0

Возможно. Но [мне не удалось установить Python 3 в Windows] (http://superuser.com/questions/861255/how-to-run-a-python-3-script). Может быть, ты поможешь мне здесь. –

3

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

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

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

Для сценария Python test, создайте два файла: a 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'] 

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

+0

Создание оболочки '.bat' для каждого скрипта Python неудобно и избыточно. Я бы не рекомендовал этого. – tripleee

0

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

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

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

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

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

2

На Windows,,

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

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

-> Установить с открытой собственностью «python.exe»

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

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

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

-> системной переменной Edit PATHEXT и добавить ".py" расширение в список.