Shell Script: esegue un programma Python dall'interno di uno script shell


139

Ho provato a cercare su Google la risposta ma senza fortuna.

Devo usare il mio supercomputer server di Works, ma per poter eseguire il mio script Python, deve essere eseguito tramite uno script shell.

Ad esempio, voglio job.sheseguirepython_script.py

Come può essere realizzato?


2
Hai provato a inserire il python python_script.pytuo script shell?
thkala,

Ehm python python_script.py. O solo ./python_script.pyse la sceneggiatura ha avuto un pasticcio.

2
@delnan: ./python_script.py richiede anche che lo script sia eseguibile
thkala

che cosa hai provato esattamente e qual è il problema? O non hai fatto così bene una ricerca su Google, o c'è molto che non ci stai dicendo ...
Thkala,

3
Questa è una domanda piuttosto vecchia, ma la risposta migliore / più completa è quella di João Víctor. Assicurati di leggere fino ad esso.
Still.Tony,

Risposte:


194

Assicurati solo che l'eseguibile python sia nella variabile di ambiente PATH, quindi aggiungi lo script

python path/to/the/python_script.py

Dettagli:

  • Nel file job.sh, inserisci questo
#!/bin/sh
python python_script.py
  • Esegui questo comando per rendere eseguibile lo script per te: chmod u+x job.sh
  • Eseguirlo : ./job.sh

2
Dipende dal tuo sistema. Python 3 potrebbe essere il runtime predefinito di Python o potrebbe non esserlo. Puoi verificare eseguendo python --versione puoi applicare la versione con python3 hello.py.
Jean-Bernard Jansen,

Cosa fare se non trova le importazioni già installate, come i panda?
mah65,

Significa che hai lanciato il binario python sbagliato o l'ambiente non è giusto. In tal caso, è necessario popolare un virtualenv, quindi eseguire source PATH/TO/VENV/bin/activatequindi chiamarepython python_script.py
Jean-Bernard Jansen il

Sto provando a farlo in automator e sto ricevendo un errore; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedc'è un modo per includere il mio codice Python in linea all'interno dello script bash?
Keyslinger

111

Metodo 1 - Crea uno script di shell:

Supponiamo di avere un file Python hello.py Crea un file chiamato job.shche contiene

#!/bin/bash
python hello.py

contrassegnalo come eseguibile utilizzando

$ chmod +x job.sh

quindi eseguirlo

$ ./job.sh

Metodo 2 (MIGLIORE): esegui lo stesso pitone dalla shell:

Modifica il tuo script hello.pye aggiungilo come prima riga

#!/usr/bin/env python

contrassegnalo come eseguibile utilizzando

$ chmod +x hello.py

quindi eseguirlo

$ ./hello.py

5
Modifica la tua risposta per renderla più leggibile. È possibile utilizzare il pulsante 101010 nell'editor delle risposte per contrassegnare il contenuto dello script come codice.
thkala,

1
Dimentico sempre #!/usr/bin/env python. Ricordati di assicurarti di fare riferimento alla giusta versione di Python + percorso per il tuo sistema!
Still.Tony,

10

Imho, scrivendo

python /path/to/script.py

È abbastanza sbagliato, soprattutto in questi giorni. Quale pitone? python2.6? 2.7? 3.0? 3.1? Il più delle volte è necessario specificare la versione di Python nel tag shebang del file Python. Incoraggio a usare

#! / usr / bin / env python2 #o python2.6 o python3 o persino python3.1
per compatibilità.

In tal caso, è molto meglio avere lo script eseguibile e invocarlo direttamente:

#! / Bin / bash

/path/to/script.py

In questo modo la versione di Python che ti serve è scritta in un solo file. La maggior parte del sistema in questi giorni sta avendo python2 e python3 nel frattempo, e succede che il link simbolico python punta a python3 , mentre la maggior parte delle persone si aspetta che indichi python2 .


1
Puoi passare i parametri allo stesso modo di python script.py param?
kristian

@kristian yes./abc.py -h

7

Salvare il seguente programma come print.py:

#!/usr/bin/python3
print('Hello World')

Quindi nel tipo di terminale:

chmod +x print.py
./print.py

4

Questo funziona meglio per me: aggiungi questo nella parte superiore dello script:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe è il percorso di python.exe sulla mia macchina) Quindi eseguire lo script tramite:

chmod +x script-name.py && script-name.py

Giusto per chiarire, questo è specifico di Windows. E il prompt che uso è Git Bash. Lo trovo super utile. Soprattutto in ambiente Windows
peterb

4

Questo funziona per me:

  1. Creare un nuovo processo di file shell. Quindi diciamo: touch job.she aggiungi il comando per eseguire lo script Python (puoi anche aggiungere argomenti della riga di comando a quel Python, di solito predefinisco i miei argomenti della riga di comando).

    chmod +x job.sh

  2. All'interno job.shaggiungere i seguenti file PY, diciamo:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

L'output di job.sh dovrebbe apparire così:

Done with python_file.py

Done with python_file1.py

Lo uso di solito quando devo eseguire più file Python con argomenti diversi, predefiniti.

Nota: solo un rapido avvertimento su ciò che sta succedendo qui:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Qui lo script della shell eseguirà il file python_file.py e aggiungerà più argomenti della riga di comando in fase di esecuzione al file python.
  • Questo non significa necessariamente che devi passare anche gli argomenti della riga di comando.
  • Puoi semplicemente usarlo come python python_file.py:, chiaro e semplice. Successivamente, >> stampa e memorizza l'output di questo file .py nel file testpy-output.txt.
  • && è un operatore logico che verrà eseguito solo dopo aver eseguito correttamente quanto sopra e come eco facoltativo "completato con python_file.py" verrà ripetuto sul tuo cli / terminal in fase di esecuzione.

4

Dovresti essere in grado di invocarlo come python scriptname.pyad es

# !/bin/bash

python /home/user/scriptname.py 

Assicurati inoltre che lo script disponga delle autorizzazioni per l'esecuzione.

Puoi renderlo eseguibile usando chmod u+x scriptname.py.


2

Lo uso e funziona benissimo

#/bin/bash
/usr/bin/python python python_script.py

1

Poiché gli altri post dicono tutto (e mi sono imbattuto in questo post mentre cercavo quanto segue).
Ecco un modo per eseguire uno script Python da un altro script Python:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

e puoi fornire argomenti fornendo qualcun altro sys.argv

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.