Come eseguire direttamente un programma Python?


13

Come eseguire direttamente un programma Python?

Ho creato un file .py (diciamo, mnik.py ) in gedit. Funziona senza problemi nel terminale.

Il comando va

python3 mnik.py

Ma ogni volta che faccio clic sul file viene aperto con gedit. Non posso eseguirlo direttamente facendo clic.

Cosa fare?



4
@kasperd Digitare python3sulla riga di comando con un argomento è un modo eccellente per eseguire script Python. È in effetti il ​​modo più semplice per eseguire un programma che richiede un terminale e argomenti (come molti dei miei script, ma anche programmi come mercurial, sphinx). Vuoi spiegare perché quello che faccio da oltre 20 anni non è il modo giusto?
Anthon,

3
@kasperd Uno script (o programma) Python scritto correttamente non deve avere una riga shebang. In caso contrario, è comunque uno script Python in ogni modo. Questo script non può essere eseguito dalle shell di Linux nella forma abbreviata che sembra preferire. Ci sono anche ambienti che non richiedono affatto agli script Python di avere una linea shebang e consentire loro di avviare lo script facendo doppio clic.
Anthon,

1
@kasperd Ciò di cui il kernel ha bisogno per eseguire uno script Python ./scriptnamenon convalida l'affermazione che l'esecuzione di uno script dalla riga di comando tramite python3. Esistono diversi modi di eseguire script Python e fare python3 ./mnik.pyè anche un modo corretto di fare le cose, è solo diverso (e almeno ottieni Python3 in quel modo e non Python2 come è più probabile con il maggior numero di risposte finora)
Anthon

1
L'uso di <language> <script> è un modo totalmente valido e accettato per eseguire uno script. Suggerire che è una cattiva pratica dovrebbe essere disapprovato.
Jacob Vlijm,

Risposte:


26

Sono necessarie due cose.

  1. Uno script deve contenere una #!riga che indica al sistema operativo quale interprete utilizzare. Nel tuo caso deve essere la prima riga del codice#!/usr/bin/env python3
  2. Devi aprire il file manager, andare su Modifica -> Preferenze -> Comportamento e selezionare cosa fare con i file eseguibili

    inserisci qui la descrizione dell'immagine

    1. Infine, assicurati che il file stesso abbia effettivamente le autorizzazioni eseguibili impostate. Nel terminale è possibile eseguire chmod +x /path/to/script.pye nella GUI, fare clic con il tasto destro sul file e modificarne le proprietà -> Autorizzazioni

    inserisci qui la descrizione dell'immagine

    inserisci qui la descrizione dell'immagine

Nota sulla linea Shebang

La prima riga si chiama Shebang Line e deve iniziare con #!; qualunque cosa venga dopo è il nome dell'interprete che leggerà il tuo codice. Nel caso in cui si stia utilizzando python3è possibile utilizzare #!/usr/bin/python3o #!/usr/bin/env python3per la portabilità. Se non stai usando un codice specifico per la versione di Python, usa semplicemente#!/usr/bin/env python

Nota sull'output dello script:

Se lo script stampa l'output sulla console, dovrà disporre di una finestra terminale o in alternativa utilizzare finestre di dialogo della GUI come zenity. Preferisci usare l' Run in Terminalopzione se vuoi vedere il codice. Se vuoi che lo script faccia qualcosa senza vedere l'output della console, usa l' Runopzione.

inserisci qui la descrizione dell'immagine

Inoltre, se si dispone di parametri della riga di comando, come sys.argv[1]nello script, non è possibile impostarli a meno che non sia aperta la finestra del terminale.


1
@PriyadarshiPaul È lo stesso del Filesprogramma sul programma di avvio. In windows- My Computer
talk

@PriyadarshiPaul è nautilusnel Terminal
grooveplex il


3
#!/usr/bin/env pythoninvocherà Python2 sulla maggior parte dei sistemi Ubuntu. Sebbene sia possibile creare uno script Python scritto per Python3 compatibile con Python2, non darei per scontato che l'OP lo abbia fatto. #!/usr/bin/env python3sembra uno shebang più appropriato
Anthon,

1
E perché stiamo portando Arch Linux qui? Forse mi imbatterò in un po 'cattivo, ma stiamo parlando di Ubuntu qui. Su Ubuntu per impostazione predefinita python è collegato a python2.7 Se stai sviluppando software, probabilmente dovresti essere consapevole di quali collegamenti dove, se usi qualcosa di diverso dalla versione predefinita del tuo sistema operativo, specificalo esplicitamente. Certo, possiamo soddisfare ogni singola domanda, ma per gridare a squarciagola - se codifichi, fallo nel modo giusto.
Sergiy Kolodyazhnyy,

3

È necessario inserire la posizione del programma per eseguire il codice sulla prima riga e quindi è necessario impostare lo script da eseguire come eseguibile modificandone le autorizzazioni. Questo presuppone che tu stia lanciando le tue applicazioni dal terminale o da un altro script.

Trova la tua installazione di Python

$ which python
/usr/bin/python

Aggiungi la posizione dei programmi nella riga superiore del programma con un #!davanti

#!/usr/bin/python

# Python code goes here....

Imposta lo script Python in modo che abbia diritti di esecuzione

$ chmod 700 test.py

Ora puoi eseguire direttamente lo script

$ ./test.py

Elenco di codici per test.py

#!/usr/bin/python

print "test"

2

Se si desidera eseguire questo programma senza digitare, python3 mnik.pyè necessario rendere eseguibile lo script e assicurarsi che python3venga utilizzato per eseguirlo.

Il primo che puoi fare eseguendo

 chmod +x mnik.py

la seconda cosa che puoi fare aggiungendo come prima riga di uno script una riga shebang che invoca python3 . Su tutti i sistemi Ubuntu con cui ho lavorato fornito con python3, puoi ottenere python3 aggiungendo questa riga in alto:

#!/usr/bin/env python3

Dopo quei due modifiche è possibile digitare /path/to/mnik.py, ./mnik.pyo semplicemente mnik.py(quest'ultimo richiede lo script di essere nel PATH).

Se si apportano queste modifiche si potrebbe anche prendere in considerazione ridenominazione mnik.pya mnik, che è pratica comune con i pacchetti Python con i comandi che vengono pubblicati su PyPI.


ok, nessuno di questi ora non funziona
Priyadarshi Paul,

Che cos'è "ok"? A cosa si riferiscono "questi"?
Anthon,

Sta dicendo ** usr / bin / env: cattivo interprete: nessun file o directory **
Priyadarshi Paul

C'è almeno un /mancante nella parte anteriore lì. Spiega che cos'è "It" nel tuo commento. È la shell bash? È Windows Command.com? Da cosa stai invocando il programma e con quale sintassi della riga di comando?
Anthon,
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.