Esecuzione di script Python dal terminale senza estensione .py


14

Voglio chiamare uno script python script.py dal terminale semplicemente digitando script . È possibile? Se é cosi, come?

So che posso evitare di digitare python script.py aggiungendo #! / Usr / bin / env python nella parte superiore dello script, ma devo ancora aggiungere il suffisso .py per eseguire lo script.

Risposte:


21

I file system Unix / Linux non si basano su estensioni come fa Windows. Non dovresti aver bisogno .pydi alla fine di un file per eseguirlo.

È possibile eseguire il file chiamandolo con l'interprete:

python ScriptFile

O contrassegnandolo come eseguibile e definendo l'interprete sulla prima riga (ad es #!/usr/bin/python.).

Se non è possibile eseguire il file con:

/Path/to/ScriptFile

controlla le autorizzazioni con

ls -l ScriptFile

Potrebbe essere necessario aggiungere il flag eseguibile e chmodquindi verrà eseguito per te.

Se si utilizzano regolarmente script personalizzati, è possibile assicurarsi che la directory in cui vengono archiviati sia aggiunta alla PATHvariabile di ambiente.


1
Il file è in ~ / workspace / python. Ho aggiunto ~ / workspace / python al mio percorso, ho eseguito sudo chmod a + x script.py "e ho aggiunto la riga shebang (#! / Usr / bin / env python) all'inizio dello script Posso eseguire lo script digitando * script.py , ma solo digitando lo script non funziona
jmau5,

2
In unix / linux tutto è un file e risponde al suo nome. Non puoi chiamare Script.py come script. Prova a rinominare il file da script.py a script e dovrebbe risolvere il problema.
Patrick,

Scusate ho frainteso! Tutto risolto, grazie!
jmau5,

5

L' .pyestensione non è necessaria per eseguire lo script. Devi solo rendere eseguibile lo script (ad esempio eseguendo chmod a+x script) e aggiungere la riga shebang ( #!/usr/bin/env python).


Vedi il mio commento sulla risposta di Patrick.
jmau5,

4

Come opzione è possibile creare wrapper per lo script (un .pyfile):

Ad esempio, hai uno script in runme.pymodo da poter creare un nuovo file runmeper avvolgere lo script:

#!/usr/bin/env python
import runme

e quindi chiama la runme.pyfunzionalità semplicemente invocando runmenella shell.

Ciò è utile per gli script multipiattaforma, perché sulla piattaforma Windows è possibile assegnare i .pyfile da invocare solo per nome senza estensione e shebang nell'intestazione, ma sulla piattaforma Linux non è possibile e quindi il wrapper viene fuori.

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.