Як виконувати скрипти Python в Windows?


91

У мене є простий скрипт blah.py (за допомогою Python 2):

import sys
print sys.argv[1]

Якщо я виконую свій сценарій за допомогою:

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

Він друкує аргумент, але якщо я виконую сценарій за допомогою:

blah.py argument

виникає помилка:

Помилка IndexEr ...

Отже аргументи не переходять до сценарію.

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

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


3
розміщення фрагмента коду може допомогти нам допомогти вам.
jldupont

Людина без кристалічної кулі вже дала рішення =) print sys.argv [1] видає цю помилку.
ton4eg

Якщо у вас встановлено кілька версій Python, вам може знадобитися цей stackoverflow.com/questions/1934675/… .
laike9m

Скажіть python вручну запустити мій сценарій із реєстру: "C: \ Python27 \ python.exe" "C: \ Python27 \ tpt.py" "% 1" `

Відповіді:


144

Коли ви виконуєте сценарій, не вводячи "python" спереду, вам потрібно знати дві речі про те, як Windows викликає програму. По-перше, з’ясувати, який файл Windows вважає таким файлом:

    C: \> доц. Пи
    .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/

приклад налаштування реєстру для python.exe HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandШлях реєстру може змінюватися, використовувати python26.exeабо python.exeчи в залежності від того , вже в реєстрі.

введіть тут опис зображення HKEY_CLASSES_ROOT\py_auto_file\shell\open\command


30
Навіть якщо 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одне і те ж значення. Дивіться eli.thegreenplace.net/2010/12/14/…
parvus

5
@parvus Ваш коментар став для мене найвищим рішенням. Навіть при правильному читанні асоціацій ці дві клавіші були неправильно встановлені.
Nathan Cox,

1
Я також стикався з проблемами з тим, що HKEY_CLASSES_ROOT \ .py \ OpenWithProgids встановлюється на щось пов'язане з VisualStudio, зокрема, коли я намагаюся запускати сценарії Python у своїх тестах AppVeyor. Див. Help.appveyor.com/discussions/problems/… .
Джек О'Коннор,

1
У мене схоже питання. Anaconda за замовчуванням додав ключ реєстру з відсутнім% *
прасад

У Win10 я пишу test.py 123і друкуюся 123як sys.argv[1]. Microsoft щось змінила?
Hrvoje T

22

вам слід зробити програмою за замовчуванням для обробки файлів python python.exe.

клацніть правою кнопкою миші файл * .py, виберіть діалогове вікно "Відкрити за допомогою". Там виберіть "python.exe" і поставте галочку "завжди використовувати цю програму для цього типу файлу" (щось подібне).

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


16

Крім того, якщо ви хочете мати можливість запускати свої скрипти 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

Як виконувати скрипти 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проблему як побічний ефект.


Python Launcher знаходиться у бета-стані.
Ніколас Барбулеско

@NicolasBarbulesco: Запуск програми Python входить до складу Python 3.3, тобто він досить хороший
jfs

Може бути. Але мені не вдалося встановити Python 3 на Windows . Можливо, ви можете мені тут допомогти.
Ніколас Барбулеско

4

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

Мені потрібні ці скрипти для встановлення у відповідному місці на машинах користувачів Windows, щоб вони могли викликати їх із командного рядка. Оскільки пакет нібито зручний для користувачів, просити моїх користувачів змінити реєстр для запуску цих сценаріїв було б неможливо.

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

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

Застереження: Я не маю уявлення про те, що відбувається і як це працює, і тому буду вдячний за будь-яке пояснення.


Створення .batобгортки для кожного сценарію Python є незграбним і зайвим. Я б не рекомендував цього.
триплеє

2

У Windows ,

Щоб запустити модуль python, не вводячи "python" ,

-> Клацніть правою кнопкою миші будь-який файл python (*. Py)

-> Встановіть для властивості open з властивістю "python.exe"

-> Установіть прапорець "завжди використовувати цю програму для цього типу файлу"

-> Додайте шлях python.exe до середовища змінної, наприклад додайте C: \ Python27 до змінної середовища PATH.

Щоб запустити модуль пітона без введення «.py» розширення

-> Відредагуйте системну змінну PATHEXT та додайте до списку розширення ".PY".


1

Знайдено неймовірно корисний відповідь тут : Як запускати різні версії пітона в ЦМД?

Я б запропонував використовувати утиліту 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

Чи можете ви виконати python.exe з будь-якої карти? Якщо цього не сталося, перевірте, чи є у вас належні значення для python.exe в середовищі PATH

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

РЕДАГУВАТИ:

У цьому випадку ви не можете. ( python arg означає, що ви викликаєте python.exe з деякими параметрами, які python припускає, що це ім'я файлу сценарію, який ви хочете запустити)

Ви можете створити файл bat з рядками на карті шляху та запустити файл .bat

Приклад:
В одній з карт Шляху створіть blah.py.bat Редагуйте файл і поставте рядок

python C:\Somedir\blah.py

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


python у PATH. І каталог, який містить blah.py також у PATH. Основна ідея - виконати скрипт python, не записуючи повний шлях до нього. Але зараз у мене проблеми з передачею аргументів.
ton4eg

3
Ралу, для виконання сценарію python таким чином вам не потрібен командний файл. Використовуйте var середовища PATHEXT, щоб включити .py та .pyw як виконувані розширення. Саме через це не потрібно вказувати .bat.
Тодд,

0

Якщо це те, що я зрозумів, це так:

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

КОПІЮВАТИ (не видаляти) python.exe та перейменувати на py.exe та виконати:

py filename.py

0

Просто запустіть команду:

C:>python .\file_name.py

Якщо припустити, що ім'я файлу знаходиться в тій самій папці, а Python вже додано до змінних середовища.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.