Come posso eseguire il mio programma Python direttamente dalla shell?


10

Ho scritto una sceneggiatura. Quando si avvia, non si fermerà e continua a ricevere dati da Internet. Posso chiamarlo in questo modo:

cd /User/Desktop/project/internetScanner/
python3 main.py start

Ma vorrei chiamarlo direttamente dal terminale in questo modo, all'interno della destinazione:

internetScanner start

Come posso farlo?


2
Mi chiedo se il titolo potrebbe essere cambiato su questo ..
user606723

@ user606723 Sentiti libero di suggerire una modifica per cambiarla. Il primo titolo "Come posso far funzionare il mio programma su shell?" non era molto bravo.
Slhck,

Risposte:


27

Probabilmente dovresti rinominare il tuo file main.pyin internetScanner. Le estensioni su * nix sono puramente opzionali. Qui non dovrebbe importare.

mv main.py internetScanner

Quindi, aggiungi la seguente riga a questo file, proprio all'inizio:

#!/usr/bin/env python3

Questo farà in modo che quando la shell esegue il file, saprà usare python3per interpretare il contenuto. Questo è noto come Shebang . Ora, esegui il file eseguibile:

chmod +x internetScanner

Ora puoi eseguire il tuo programma dall'interno /User/Desktop/project/internetScanner/:

./internetScanner start

Il programma verrà eseguito in primo piano e continuerà fino a quando non si preme Ctrl- C. Se non lo desideri, puoi anche avviare il programma in background, aggiungendo una e commerciale dopo il comando:

./internetScanner start &

Ciò consentirà l'esecuzione del programma, ma è possibile continuare a utilizzare la shell. Questo si chiama controllo dei lavori, e c'è un semplice tutorial su di esso qui .

Se ora vuoi essere in grado di eseguire il programma da qualsiasi parte del sistema, devi aggiungere la internetScannerdirectory al tuo PATH: Cosa sono PATH e altre variabili di ambiente e come posso impostarle o usarle?


Buona risposta. Consiglio di aggiungere che potrebbe voler terminare il comando con una e commerciale (&) se non vuole aspettare e / o reindirizzare il flusso di output e di errore su un file.
Ben Hocking, il

@BenHocking Grazie, l'ho aggiunto alla risposta.
Slhck,

X &non scollega il processo dalla shell di controllo, ma solo lo sfondo del processo, il che significa che se quella shell esce riceverà il segnale TERM inviato ad esso; quindi se non si vuole che si dovrebbe usare distacco , detach ./internetScanner start.
Dan D.

1
@DanD. ... o nohup, disowno at, eccetera. Come posso staccare completamente un processo dal Terminale?
Slhck,

Vale la pena notare che può ancora essere nominato main.pyfintanto che è collegato a internetScannerqualche parte in $ PATH.
jdd

2

Supponendo che non /User/Desktop/project/internetScanner/siano necessari altri file , se si desidera installare per un singolo utente, link ( ln -s) main.pya $HOME/bin/internetScanner. Probabilmente dovrai $HOME/binprima mkdir .

La prossima volta che accedi, $HOME/binprobabilmente verrà aggiunto al tuo PERCORSO. Se vuoi che sia disponibile per tutti gli utenti, copialo su /usr/local/bin.

Se deve essere eseguito /User/Desktop/project/internetScanner/, iniziare importando ose chiamando

os.chdir('/User/Desktop/project/internetScanner/') 

o creare uno script di avvio in $HOME/bino /usr/local/binche cambi in /User/Desktop/project/internetScanner/ed esegua lo script.


0

Inserisci il alias internetScanner "python /User/Desktop/project/internetScanner/main.py"file .aliases (per csh). Per bash, inserisci alias internetScanner="python /User/Desktop/project/internetScanner/main.py".bashrc. Dopodiché puoi utilizzare internetScanner da qualsiasi luogo.


Non ho mai sentito parlare di un .aliasesfile. È qualcosa di standard per Bash? o devi cercarlo esplicitamente nel tuo .bashrc?
Kazark,
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.