Come eseguire gli script Python in Windows?


91

Ho un semplice script blah.py (usando Python 2):

import sys
print sys.argv[1]

Se eseguo il mio script da:

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

Stampa argomenti ma se eseguo lo script con:

blah.py argument

si verifica un errore:

IndexError ...

Quindi gli argomenti non vengono passati allo script.

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

Qual è il problema?


3
pubblicare uno snippet di codice potrebbe aiutarci ad aiutarti.
jldupont

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

Se sono installate più versioni di Python, potrebbe essere necessario questo stackoverflow.com/questions/1934675/… .
laike9m

Indica manualmente a python di eseguire il mio script dal registro: "C: \ Python27 \ python.exe" "C: \ Python27 \ tpt.py" "% 1" `

Risposte:


144

Quando esegui uno script senza digitare "python" davanti, devi sapere due cose su come Windows richiama il programma. Il primo è scoprire che tipo di file Windows pensa che sia:

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

Successivamente, è necessario sapere come Windows esegue le cose con quell'estensione. È associato al tipo di file "Python.File", quindi questo comando mostra cosa farà:

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

Quindi sulla mia macchina, quando digito "blah.py foo", eseguirà questo comando esatto, senza alcuna differenza nei risultati rispetto a se avessi digitato l'intera cosa da solo:

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

Se digiti la stessa cosa, comprese le virgolette, otterrai risultati identici a quando digiti "blah.py foo". Ora sei in grado di capire da solo il resto del tuo problema.

(Oppure pubblica informazioni più utili nella tua domanda, come copie effettive taglia e incolla di ciò che vedi nella console. Tieni presente che le persone che fanno quel tipo di cose ottengono il voto delle loro domande e ottengono punti reputazione e più persone è probabile che li aiuti con buone risposte.)

Inserito dai commenti:

Anche se assoc e ftype visualizzano le informazioni corrette, può accadere che gli argomenti vengano rimossi. Ciò che può essere d'aiuto in questo caso è riparare direttamente le chiavi di registro rilevanti per Python. Impostare il

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

chiave per:

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

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

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

allo stesso valore. Vedi http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

esempio di impostazione del registro per python.exe HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandIl percorso del registro può variare, utilizzare python26.exeoo quello python.exeche è già presente nel registro.

inserisci qui la descrizione dell'immagine HKEY_CLASSES_ROOT\py_auto_file\shell\open\command


30
Anche se assoce ftypevisualizzare le informazioni corrette, può accadere che gli argomenti vengono eliminati. Ciò che può aiutare in questo caso è riparare direttamente le chiavi di registro rilevanti per Python. Imposta la HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\commandchiave su: "C:\Python26\python26.exe" "%1" %* Probabilmente, in precedenza, %*mancava. Allo stesso modo, impostare HKEY_CLASSES_ROOT\py_auto_file\shell\open\commandlo stesso valore. Vedi eli.thegreenplace.net/2010/12/14/…
parvus

5
@parvus Il tuo commento è stata la soluzione definitiva per me. Anche con le associazioni che si leggono correttamente, queste due chiavi erano entrambe impostate in modo errato.
Nathan Cox

1
Ho anche riscontrato problemi con HKEY_CLASSES_ROOT \ .py \ OpenWithProgids impostato su qualcosa di correlato a VisualStudio, in particolare quando provo a eseguire script Python nei miei test AppVeyor. Vedi help.appveyor.com/discussions/problems/… .
Jack O'Connor

1
Ho un problema simile. Anaconda per impostazione predefinita ha aggiunto la chiave di registro con% * mancante
prasad

In Win10 scrivo test.py 123e vengo 123stampato come sys.argv[1]. Microsoft ha cambiato qualcosa?
Hrvoje T

22

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". Lì seleziona "python.exe" e seleziona "usa sempre questo programma per questo tipo di file" (qualcosa del genere).

quindi i tuoi file python verranno sempre eseguiti utilizzando python.exe


16

Inoltre, se vuoi essere in grado di eseguire i tuoi script python senza digitare .py(o .pyw) alla fine del nome del file, devi aggiungere .PY(o .PY;.PYW) all'elenco delle estensioni nella variabile d'ambiente PATHEXT.

In Windows 7:

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

Nota n. 1: le finestre del prompt dei comandi non vedranno la modifica senza essere chiuse e riaperte.

Nota n. 2: la differenza tra i file .py.pyw estensioni e è che la prima apre un prompt dei comandi quando viene eseguita e la seconda no.

Sul mio computer, ho aggiunto ;.PY;.PYW come ultime estensioni (con priorità più bassa), quindi i valori "prima" e "dopo" di 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 istruttivi:

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

Come eseguire gli script Python in Windows?

Potresti installare pylauncher . Viene utilizzato per avviare file .py, .pyw, .pyc, .pyo e supporta più installazioni Python:

T\:> blah.py argument

Puoi eseguire il tuo script Python senza specificare l'estensione .py se hai .py, .pyw nella variabile d'ambiente PATHEXT:

T:\> blah argument

Aggiunge il supporto per shebang (#! riga di intestazione) per selezionare la versione Python desiderata su Windows se sono installate più versioni. È possibile utilizzare la sintassi compatibile con * nix #! /usr/bin/env python.

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

T:\> py -3 blah.py argument

Dovrebbe anche risolvere il tuo sys.argvproblema come effetto collaterale.


Python Launcher è in stato beta.
Nicolas Barbulesco

@NicolasBarbulesco: Python launcher è incluso in Python 3.3 , cioè è abbastanza buono
jfs

Può essere. Ma non sono riuscito a installare Python 3 su Windows . Forse puoi aiutarmi qui.
Nicolas Barbulesco

4

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

Ho bisogno di questi script per essere installati nella posizione appropriata sulle macchine degli utenti Windows in modo che possano richiamarli dalla riga di comando. Poiché il pacchetto è presumibilmente facile da usare, chiedere ai miei utenti di modificare il registro per eseguire questi script sarebbe impossibile.

Mi sono imbattuto in una soluzione che la gente di Continuum usa per gli script Python forniti con il loro pacchetto Anaconda: controlla la tua directory Anaconda / Scripts per esempi.

Per uno script Python test, crea due file: ae test.bata test-script.py.

test.batha il seguente aspetto (i .batfile in Anaconda\Scriptschiamata python.execon un percorso relativo che ho adattato ai miei scopi):

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

test-script.py è il tuo vero script Python:

import sys
print sys.argv

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

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

Se copi entrambi i file in una posizione che si trova sul tuo PATH(come Anaconda\Scripts), puoi persino invocare il tuo script tralasciando il .batsuffisso

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

Disclaimer: non ho idea di cosa stia succedendo e come funzioni e quindi apprezzerei qualsiasi spiegazione.


La creazione di un .batwrapper per ogni script Python è goffa e ridondante. Non lo consiglierei.
tripla

2

Su Windows ,

Per eseguire un modulo python senza digitare "python" ,

-> Fare clic con il pulsante destro del mouse su qualsiasi file python (*. Py)

-> Imposta la proprietà open with su "python.exe"

-> Seleziona "usa sempre questo programma per questo tipo di file"

-> Aggiungi il percorso di python.exe all'ambiente variabile, ad esempio aggiungi C: \ Python27 alla variabile d'ambiente PATH.

Per eseguire un modulo python senza digitare l'estensione ".py"

-> Modifica la variabile di sistema PATHEXT e aggiungi l'estensione ".PY" all'elenco.


1

Ho trovato una risposta incredibilmente utile qui : come eseguire diverse versioni di Python in cmd?

Suggerirei di utilizzare l'utilità Python Launcher per Windows che è stata introdotta in Python 3.3 qualche tempo fa. Puoi anche scaricarlo e installarlo manualmente direttamente dal sito Web dell'autore per utilizzarlo con le 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 Python standard (cioè file .py, .pyw, .pyc e .pyo). Non solo sarai in grado di controllare in modo esplicito quale versione viene utilizzata al prompt dei comandi, ma anche script per script aggiungendo i commenti Linux / Unix-y shebang #! / Usr / bin / env pythonX al all'inizio dei tuoi script Python.

Come suggerisce JF Sebastian, Python Launcher per Windows è la scelta migliore e predefinita per avviare 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.0

Il programma di avvio di Python per Windows è un'utilità che aiuta nella posizione e nell'esecuzione di diverse versioni di Python. Consente agli script (o alla riga di comando) di indicare una preferenza per una specifica versione di Python e individuerà ed eseguirà quella versione.

Questo è un ottimo strumento, usalo!


0

Puoi eseguire python.exe da qualsiasi mappa? Se non lo fai, controlla se hai i valori corretti per python.exe nell'ambiente PATH

Sei nella stessa directory di blah.py. Controllalo eseguendo il comando -> modifica blah.py e controlla se puoi aprire questo file

MODIFICARE:

In quel caso non puoi. ( python arg significa che chiami python.exe con alcuni parametri che python presume che sia il nome del file dello script che vuoi eseguire)

È possibile creare file bat con linee nella mappa del percorso ed eseguire il file .bat

Esempio:
in una delle mappe dei percorsi creare blah.py.bat Modifica file e inserire riga

python C:\Somedir\blah.py

Ora puoi eseguire blah.py da qualsiasi luogo, poiché non è necessario inserire l'estensione .bat quando si eseguono file bat


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

3
Ralu, non è necessario un file batch per eseguire uno script Python in questo modo. Utilizza la var dell'ambiente PATHEXT per includere .py e .pyw come estensioni eseguibili. Questa var è il motivo per cui non è necessario specificare neanche .bat.
Todd,

0

Se è quello che ho capito, è così:

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

COPIA (non eliminare) python.exe e rinomina in py.exe ed esegui:

py filename.py

0

Basta eseguire il comando:

C:>python .\file_name.py

Supponendo che il nome del file si trovi nella stessa cartella e che Python sia già stato aggiunto alle variabili di ambiente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.