2009-12-20 23 views
80

Ho un semplice script di blah.py (utilizzando Python 2):Come eseguire gli script Python in Windows?

import sys 
print sys.argv[1] 

Se eseguo il mio script da:

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

Esso stampa argomento, ma se eseguo script:

blah.py argument 

errore si verifica:

IndexError ...

Così gli argomenti non passano allo script.

python.exe in PERCORSO. Cartella con blah.py anche in PERCORSO.
python.exe è il programma predefinito per eseguire i file * .py.

Qual è il problema?

+2

postare uno snippet di codice potrebbe aiutarci ad aiutarti. – jldupont

+0

L'uomo senza palla di cristallo ha già dato una soluzione =) print sys.argv [1] produce questo errore. – ton4eg

+0

Se sono installate più versioni di Python, potrebbe essere necessario questo http://stackoverflow.com/questions/1934675/how-to-execute-python-scripts-in-windows/#22439338. – laike9m

risposta

127

Quando si esegue uno script senza digitare "pitone" di fronte, è necessario sapere due cose su come di Windows richiama il programma. In primo luogo è quello di scoprire che tipo di file di Windows pensa che sia:

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

Successivamente, è necessario sapere come di Windows è in esecuzione le cose con tale estensione.E 'associato al tipo di file "Python.File", quindi questo comando mostra cosa si farà:

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

Quindi sulla mia macchina, quando digito "foo blah.py", che eseguirà questo comando esatto , con nessuna differenza nei risultati che se avessi digitato la cosa piena me stesso:

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

Se si digita la stessa cosa, comprese le virgolette, allora si ottengono risultati identici a quando basta digitare "blah. py foo ". Ora sei in grado di capire da solo il resto del tuo problema.

(Oppure pubblica più informazioni utili nella tua domanda, come le copie effettive di copia e incolla di ciò che vedi nella console. Nota che le persone che fanno quel tipo di cose ottengono le loro domande votate e ottengono punti reputazione , e sempre più persone sono suscettibili di aiutarli con buone risposte)

portato da Commenti:.

Anche se assoc e ftype visualizzano le informazioni corrette, può accadere che gli argomenti vengono eliminati. Ciò che può aiutare in questo caso è il fissaggio diretto delle chiavi di registro rilevanti per Python. Impostare la chiave

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

a:

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

Probabilmente, in precedenza, %* mancava. Allo stesso modo, impostare

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 

allo stesso valore. Vedere 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 Il percorso del Registro può variare, utilizzare python26.exe o python.exe o seconda di quale è già nel Registro di sistema.

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

+27

Anche se 'assoc' e' ftype' visualizzano le informazioni corrette, può accadere che gli argomenti vengano eliminati. Ciò che può aiutare in questo caso è il fissaggio diretto delle chiavi di registro rilevanti per Python. Impostare la chiave 'HKEY_CLASSES_ROOT \ Applicazioni \ python26.exe \ shell \ open \ command' su: ' "C: \ Python26 \ python26.exe" "% 1"% * ' Probabilmente, in precedenza,'% * ' mancava. Allo stesso modo, imposta 'HKEY_CLASSES_ROOT \ py_auto_file \ shell \ open \ command' sullo stesso valore. Vedere http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/ – parvus

+4

@parvus Il tuo commento è stato la soluzione definitiva per me. Anche con le associazioni che leggono correttamente, queste due chiavi erano impostate in modo errato. –

+1

Ho anche avuto problemi con HKEY_CLASSES_ROOT \ .py \ OpenWithProgids impostato su qualcosa di VisualStudio correlato, in particolare quando provo ad eseguire script Python nei miei test AppVeyor. Vedi http://help.appveyor.com/discussions/problems/2569-latest-appveyor-build-platform-update-introduced-a-python-problem. –

0

È possibile eseguire python.exe da qualsiasi mappa? In caso contrario, verificare se i valori per python.exe sono corretti nell'ambiente PATH

Sei nella stessa directory di blah.py. Controllare questo comando di emissione -> Modifica blah.py e verificare se è possibile aprire questo file

EDIT:

In questo caso non si può. (pitone arg significa che si chiama python.exe whit alcuni parametri che assumono pitone che è il nome del file di script da eseguire)

È possibile creare file di pipistrello linee di Pentecoste nella mappa percorso e eseguire file .bat

Esempio:
In una delle mappe Percorso creare blah.py.bat Modificare il file e mettere linea

python C:\Somedir\blah.py 

Y Ora puoi eseguire blah.py da qualsiasi luogo, perché non devi inserire .bat extention quando esegui i file bat

+0

python in PATH. E directory che contiene blah.py anche in PERCORSO. L'idea principale è di eseguire lo script python senza scrivere il percorso completo. Ma ora ho problemi con gli argomenti che passano. – ton4eg

+3

Ralu, non è necessario un file batch per eseguire uno script python in questo modo. Utilizzare il var di ambiente PATHEXT per includere .py e .pyw come estensioni eseguibili. Questo var è il motivo per cui non è necessario specificare .bat. – Todd

21

dovresti fare in modo che l'applicazione predefinita per gestire i file python sia python.exe.

Fare clic con il pulsante destro del mouse su un file * .py, selezionare la finestra di dialogo "Apri con". Qui seleziona "python.exe" e seleziona "usa sempre questo programma per questo tipo di file" (qualcosa del genere).

poi i file python verranno sempre eseguiti utilizzando python.exe

13

Inoltre, se si vuole essere in grado di eseguire i propri script python senza digitare il .py (o .pyw) alla fine del nome del file, è necessario aggiungere .PY (o .PY;.PYW) per l'elenco delle estensioni nella variabile d'ambiente PATHEXT.

In Windows 7:

fare clic destro su Computer
sinistra-clic su Proprietà
sinistra-clic su Impostazioni di sistema avanzate
sinistro del mouse sulla scheda Avanzate
sinistro del mouse variabili di ambiente ...
in "variabili di sistema" scorrere verso il basso fino a visualizzare PATHEXT
fare clic con il tasto sinistro su PATHEXT per evidenziarlo
fare clic con il tasto sinistro su Modifica ...
Modifica "Valore variabile" in modo che contenga ;.PY(il tasto di fine sarà saltare alla fine)
sinistra-clic su OK
sinistra-clic su OK
sinistra-clic su OK

Nota # 1 : la finestra del prompt dei comandi non vedrà la modifica senza essere chiusa e riaperta.

Nota n. 2: la differenza tra le estensioni .py e .pyw è che il primo apre un prompt dei comandi quando viene eseguito e il secondo no.

Sul mio computer, ho aggiunto ;.PY;.PYW come le ultime estensioni (più basso prioritarie), in modo che il "prima" e "dopo" valori della PATHEXT erano:

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

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

Ecco alcuni comandi istruttivo:

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

Come eseguire gli script Python in Windows?

È possibile installare pylauncher. E 'usato per lanciare .py, .pyw, .pyc, .pyo e supporta più installazioni di Python:

T\:> blah.py argument 

È possibile eseguire lo script Python senza specificare l'estensione .py se avete .py, .pyw in PATHEXT variabile di ambiente:

T:\> blah argument 

si aggiunge il supporto per la baracca (#! riga di intestazione) per selezionare la versione di Python desiderato su Windows se si dispone di più versioni installate. È possibile utilizzare la sintassi * nix-compatibile #! /usr/bin/env python.

È possibile specificare la versione in modo esplicito ad esempio, per eseguire utilizzando l'ultima versione di versione di Python 3:

T:\> py -3 blah.py argument 

Si deve anche risolvere il problema sys.argv come un effetto collaterale.

+0

Python Launcher è in versione beta. –

+0

@NicolasBarbulesco: [Python launcher è incluso in Python 3.3] (https://docs.python.org/3/using/windows.html#python-launcher-for-windows) vale a dire, è abbastanza buono – jfs

+0

Forse. Ma [non sono riuscito a installare Python 3 su Windows] (http://superuser.com/questions/861255/how-to-run-a-python-3-script). Forse puoi aiutarmi qui. –

3

Ho riscontrato lo stesso problema ma nel contesto della necessità di impacchettare il mio codice per utenti Windows (provenienti da Linux). Il mio pacchetto contiene un numero di script con opzioni da riga di comando.

Ho bisogno di questi script per essere installati nella posizione appropriata sui computer degli utenti Windows in modo che possano richiamarli dalla riga di comando. Dato che il pacchetto è presumibilmente user-friendly, chiedere ai miei utenti di modificare il loro registro per eseguire questi script sarebbe impossibile.

Mi sono imbattuto in una soluzione che gli utenti di Continuum usano per gli script Python forniti con il loro pacchetto Anaconda - controlla la directory Anaconda/Scripts per gli esempi.

Per uno script Python test, creare due file: uno test.bat e uno test-script.py.

test.bat appare come segue (i file .bat in Anaconda\Scripts chiamata python.exe con un percorso relativo, che ho adattato per i miei scopi):

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

test-script.py è lo script Python attuale:

import sys 
print sys.argv 

Se lasci questi due file nella tua directory locale puoi invocare il tuo script Python attraverso il file .bat facendo

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

Se si copiano entrambi i file in una posizione che si trova sul PATH (come Anaconda\Scripts), allora si può anche richiamare lo script tralasciando il suffisso .bat

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

Disclaimer: io ho idea cosa sta succedendo e come funziona e quindi apprezzerebbe qualsiasi spiegazione.

+0

Creare un wrapper '.bat' per ogni script Python è goffo e ridondante. Non lo consiglierei. – tripleee

0

Trovato una risposta incredibilmente utile here: Come eseguire diverse versioni Python in cmd?

Suggerirei di utilizzare l'utilità Python Launcher per Windows che era stata introdotta in Python 3.3 qualche tempo fa. Puoi anche scaricarlo e installarlo manualmente direttamente dal sito dell'autore per utilizzarlo con versioni precedenti di Python 2 e 3.

Indipendentemente da come lo si ottiene, dopo l'installazione si sarà associato a tutte le estensioni di file standard di Python (cioè .py, .pyw, .pyc e .pyo). Non solo sarai in grado di controllare esplicitamente quale versione viene utilizzata al prompt dei comandi, ma anche come script per script aggiungendo commenti Linux/Unix-y shebang #!/Usr/bin/env pythonX al inizio dei tuoi script Python.

Come suggerisce J.F. Sebastian, Python Launcher for Windows è la scelta migliore e predefinita per l'avvio di diverse versioni di Python in Windows. Era uno strumento di terze parti, ma ora è ufficialmente supportato da Python 3.3.

Novità nella versione 3.3.

Il programma di avvio Python per Windows è un'utilità che aiuta a localizzare ed eseguire diverse versioni di Python. Permette agli script (o alla riga di comando) di indicare una preferenza per una specifica versione di Python e localizzerà ed eseguirà quella versione.

Questo è un grande strumento basta usarlo!

2

Su di Windows,

Per lanciare un modulo python senza digitare "python",

-> Fare clic destro qualsiasi python (*.py) file

-> Imposta allo scoperto con la proprietà a "python.exe"

-> Selezionare la casella "Utilizza sempre questo programma per questo tipo di file"

-> aggiungere il percorso di python.exe in ambiente variabile es aggiungi C: \ Python27 alla variabile di ambiente PATH.

Per lanciare un modulo python senza digitare estensione ".py"

-> Modifica variabile di sistema PATHEXT e aggiungere l'estensione ".PY" alla lista.

Problemi correlati