it-swarm.com.de

Wie führt man Python-Skripte in Windows aus?

Ich habe ein einfaches Skript blah.py (mit Python 2):

import sys
print sys.argv[1]

Wenn ich mein Skript ausführt,

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

Es gibt Argumente aus, aber wenn ich das Skript ausführt

blah.py argument

fehler tritt auf:

IndexError ...

Argumente werden also nicht an das Skript übergeben.

python.exe in PFAD. Ordner mit blah.py auch in PATH.
python.exe ist das Standardprogramm zum Ausführen von * .py-Dateien.

Worin besteht das Problem?

88
ton4eg

Wenn Sie ein Skript ausführen, ohne vorher "Python" einzugeben, müssen Sie wissen, wie Windows das Programm aufruft. Zuerst müssen Sie herausfinden, welche Art von Datei Windows denkt: 

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

Als Nächstes müssen Sie wissen, wie Windows mit dieser Erweiterung ausgeführt wird. Es ist mit dem Dateityp "Python.File" verknüpft, daher zeigt dieser Befehl, was er tun wird:

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

Wenn ich also auf meiner Maschine "blah.py foo" eingebe, wird dieser Befehl genau ausgeführt, ohne dass sich die Ergebnisse unterscheiden, als wenn ich die gesamte Sache selbst eingegeben hätte:

 "c:\python26\python.exe" "blah.py" foo 

Wenn Sie dasselbe eingeben, einschließlich der Anführungszeichen, erhalten Sie identische Ergebnisse wie bei der Eingabe von "blah.py foo". Jetzt können Sie den Rest Ihres Problems selbst herausfinden. 

(Oder veröffentlichen Sie weitere hilfreiche Informationen in Ihrer Frage, z. B. aktuelle Kopien, die in der Konsole angezeigt werden.) Beachten Sie, dass Personen, die diese Art von Dingen ausführen, ihre Fragen bewertet bekommen und Reputationspunkte und mehr Personen erhalten dürften ihnen mit guten Antworten helfen.)

Eingeholt von Kommentaren:

Selbst wenn assoc und ftype die richtigen Informationen anzeigen, kann es vorkommen, dass die Argumente entfernt werden. In diesem Fall kann es hilfreich sein, die relevanten Registrierungsschlüssel für Python direkt zu reparieren. Stellen Sie das ein 

HKEY_CLASSES_ROOT\Applications\python26.exe\Shell\open\command

schlüssel zu: 

"C:\Python26\python26.exe" "%1" %*

Wahrscheinlich fehlte %* zuvor. Ähnlich einstellen 

 HKEY_CLASSES_ROOT\py_auto_file\Shell\open\command

auf den gleichen Wert. Siehe 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 Der Registrierungspfad kann variieren, verwenden Sie python26.exe oder python.exe oder denjenigen, der sich bereits in der Registrierung befindet.

 enter image description here HKEY_CLASSES_ROOT\py_auto_file\Shell\open\command

137
Peter Hansen

sie sollten die Standardanwendung zum Verarbeiten von Python-Dateien mit python.exe erstellen.

klicken Sie mit der rechten Maustaste auf eine * .py-Datei und wählen Sie den Dialog "Öffnen mit". Dort wählen Sie "python.exe" aus und markieren Sie "Dieses Programm immer für diesen Dateityp verwenden" (ähnlich).

dann werden Ihre Python-Dateien immer mit python.exe ausgeführt

22
santosc

Wenn Sie Ihre Python-Skripts ausführen möchten, ohne .py (oder .pyw) am Ende des Dateinamens eingeben zu müssen, müssen Sie der Liste der Erweiterungen in der Umgebungsvariable PATHEXT .PY (oder .PY;.PYW) hinzufügen.

In Windows 7:

klicken Sie mit der rechten Maustaste auf Computer
Klicken Sie mit der linken Maustaste auf Eigenschaften
Klicken Sie mit der linken Maustaste auf Erweiterte Systemeinstellungen
Klicken Sie mit der linken Maustaste auf die Registerkarte Erweitert
Klicken Sie mit der linken Maustaste auf Umgebungsvariablen ...
unter "Systemvariablen" scrollen Sie nach unten, bis Sie PATHEXT sehen
Klicken Sie mit der linken Maustaste auf PATHEXT, um es hervorzuheben
Klicken Sie mit der linken Maustaste auf Bearbeiten ...
Bearbeiten Sie "Variablenwert" so, dass er ;.PYenthält (die Ende-Taste springt bis zum Ende)
Klicken Sie mit der linken Maustaste auf OK
Klicken Sie mit der linken Maustaste auf OK
Klicken Sie mit der linken Maustaste auf OK

Hinweis 1: In den Eingabeaufforderungsfenstern wird die Änderung nicht angezeigt, ohne dass sie geschlossen und erneut geöffnet wird.

Hinweis 2: Der Unterschied zwischen den Erweiterungen .py und .pyw besteht darin, dass die erste eine Eingabeaufforderung öffnet, wenn sie ausgeführt wird, und die zweite nicht.

Auf meinem Computer habe ich ;.PY;.PYW als letzte Erweiterungen (mit der niedrigsten Priorität) hinzugefügt. Die Werte "before" und "after" von PATHEXT lauteten:

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

nach .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

Hier sind einige lehrreiche Befehle:

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

Ich bin auf das gleiche Problem gestoßen, aber im Zusammenhang mit der Notwendigkeit, meinen Code für Windows-Benutzer (von Linux kommend) zu verpacken ... Das Paket enthält eine Reihe von Skripts mit Befehlszeilenoptionen.

Ich brauche diese Skripts, um an den entsprechenden Speicherorten auf Windows-Computern installiert zu werden, damit sie von der Befehlszeile aus aufgerufen werden können .. Da das Paket angeblich benutzerfreundlich ist, bittet ich meine Benutzer, ihre Registrierung zu ändern, um diese Skripts auszuführen wäre unmöglich.

Ich bin auf eine Lösung gestoßen, die die Leute von Continuum für Python-Skripts verwenden, die mit ihrem Anaconda-Paket geliefert werden. In Ihrem Anaconda/Scripts-Verzeichnis finden Sie Beispiele.

Erstellen Sie für ein Python-Skript test zwei Dateien: einen test.bat und einen test-script.py.

test.bat sieht wie folgt aus (die .bat-Dateien in Anaconda\Scripts rufen python.exe mit einem relativen Pfad auf, den ich für meine Zwecke angepasst habe):

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

test-script.py ist Ihr aktuelles Python-Skript:

import sys
print sys.argv

Wenn Sie diese beiden Dateien in Ihrem lokalen Verzeichnis belassen, können Sie Ihr Python-Skript über die Datei .bat aufrufen

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

Wenn Sie beide Dateien an einen Ort kopieren, der sich in Ihrer PATH befindet (wie Anaconda\Scripts), können Sie Ihr Skript sogar aufrufen, indem Sie das Suffix .bat weglassen

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

Haftungsausschluss: Ich habe keine Ahnung, was los ist und wie das funktioniert, und ich würde mich über jede Erklärung freuen.

4
user2042696

Wie führt man Python-Skripte in Windows aus?

Sie könnten pylauncher installieren. Es wird zum Starten von .py-, .pyw-, .pyc-, .pyo-Dateien verwendet und unterstützt mehrere Python-Installationen:

T\:> blah.py argument

Sie können Ihr Python-Skript ausführen, ohne die Erweiterung .py anzugeben, wenn Sie die PATHEXT-Umgebungsvariable .py, .pyw verwenden:

T:\> blah argument

Sie unterstützt Shebang (#!-Kopfzeile), um die gewünschte Python-Version unter Windows auszuwählen, wenn Sie mehrere Versionen installiert haben. Sie können die * nix-kompatible Syntax #! /usr/bin/env python verwenden.

Sie können die Version explizit angeben, z. B. um die aktuell installierte Python 3-Version auszuführen:

T:\> py -3 blah.py argument

Es sollte auch Ihr sys.argv-Problem als Nebeneffekt beheben.

4
jfs

Unter Windows 

Um ein Python-Modul auszuführen, ohne "python" einzugeben,

-> Klicken Sie mit der rechten Maustaste auf eine Python-Datei (* .py)

-> Setze die open with-Eigenschaft auf "python.exe" 

-> Aktivieren Sie das Kontrollkästchen "Dieses Programm immer für diesen Dateityp verwenden".

-> Hängen Sie den Pfad von python.exe an die variable Umgebung an, z. C:\Python27 an die Umgebungsvariable PATH anhängen.

Bis Ein Python-Modul ausführen, ohne die Erweiterung ".py" einzugeben.

-> PATHEXT-Systemvariable bearbeiten und Erweiterung ".PY" an die Liste anhängen.

2
Ashfaq Memon

Fand eine unglaublich nützliche Antwort hier : Wie lassen sich verschiedene Python-Versionen in cmd ausführen?

Ich würde vorschlagen, das Python Launcher für Windows-Dienstprogramm zu verwenden, das vor einiger Zeit in Python 3.3 eingeführt wurde. Sie können sie auch manuell von der Website des Autors herunterladen und installieren, um sie mit früheren Versionen von Python 2 und 3 zu verwenden.

Unabhängig davon, wie Sie es erhalten haben, hat es sich nach der Installation mit allen Standard-Python-Dateierweiterungen (d. H. .Py-, .pyw-, .pyc- und .pyo-Dateien) verbunden. Sie können nicht nur explizit steuern, welche Version an der Eingabeaufforderung verwendet wird, sondern auch auf Skriptbasis, indem Sie die Linux/Unix-y Shebang #!/Usr/bin/env-PythonX-Kommentare an der Anfang Ihrer Python-Skripte.

Wie J.F. Sebastian vorschlägt, ist Python Launcher für Windows / die beste und beste Wahl für den Start einer anderen Python-Version in Windows. Früher war es ein Tool von Drittanbietern, jetzt wird es seit Python 3.3 offiziell unterstützt.

Neu in Version 3.3.

Der Python-Launcher für Windows ist ein Dienstprogramm, das die Position und Ausführung verschiedener Python-Versionen unterstützt. Ermöglicht Skripten (oder der Befehlszeile), eine Präferenz für eine bestimmte Python-Version anzugeben, und diese Version finden und ausführen.

Dies ist ein großartiges Werkzeug, verwenden Sie es einfach!

1
laike9m

Wenn ich das verstanden habe, dann ist es so:

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

COPY (nicht löschen) python.exe und umbenennen in py.exe und führen Sie aus:

py filename.py
0
Lucas Paz

Können Sie python.exe von einer beliebigen Map aus ausführen? Wenn dies nicht der Fall ist, prüfen Sie, ob in der PATH-Umgebung die richtigen Werte für python.exe vorhanden sind

Befinden Sie sich in demselben Verzeichnis als blah.py. Überprüfen Sie dies, indem Sie den Befehl -> edit blah.py ausgeben und prüfen, ob Sie diese Datei öffnen können

BEARBEITEN:

In diesem Fall können Sie nicht. (python arg bedeutet, dass Sie python.exe mit einigen Parametern aufrufen, von denen Python annimmt, dass es sich dabei um den Dateinamen des Skripts handelt, das Sie ausführen möchten.)

Sie können in Ihrer Pfadzuordnung bat file whit Zeilen erstellen und die .bat-Datei ausführen

Beispiel:
In einer der Pfadzuordnungen erstellen Sie blah.py.bat Bearbeiten Sie die Datei und setzen Sie die Zeile

python C:\Somedir\blah.py

Sie können jetzt blah.py von jedem beliebigen Ort aus ausführen, da Sie beim Erstellen von bat-Dateien keine Erweiterung von .bat vornehmen müssen

0
Luka Rahne

Führen Sie einfach den Befehl aus:

C:>python .\file_name.py

Angenommen, der Dateiname befindet sich im selben Ordner und Python wurde bereits zu Umgebungsvariablen hinzugefügt.

0
Mwizak