2010-01-22 19 views
10

Ho una funzione "email di allarme" all'interno di un modulo python. Voglio essere in grado di chiamare questa funzione da uno script bash. So che puoi chiamare un modulo usando 'python' nello script, ma non lo sono se puoi o come chiameresti una funzione specifica all'interno del modulo.Chiamare una funzione python da uno script bash

risposta

27
python -c'import themodule; themodule.thefunction("boo!")' 
+1

E se volessi passare una stringa alla funzione python? o semplicemente per stampare ciao? 'python -c 'print (" ciao ")" non funziona. – mango

+1

@mango - Errato: gli argomenti funzionano. Ho copiato e incollato il tuo esempio, infatti, e poi testato di nuovo usando sia 'python3' che 'python2'. Potresti avere un problema diverso. –

+0

Cosa succede se il modulo python si trova in un'altra directory? – Chaos

13

È possibile utilizzare l'opzione -c:

python -c "import random; print random.uniform(0, 1)" 

Modifica di cui hai bisogno.

2

Per chiamare una funzione specifica in un modulo, assicurare che il modulo ha la seguente:

if __name__ == "__main__": 
    the_function_to_call() 

allora si può semplicemente fare questo nello script di shell.

python module.py 

O

python -m module 

A seconda o meno il modulo del sul PYTHONPATH.

+0

Questo funzionerebbe solo se non avevi già un main o se avessi già un main che puntava alla funzione di cui hai bisogno. Nel mio caso c'è già un main e punta a un'altra funzione nel modulo quindi questa non era un'opzione. – Daniel

+0

@Daniel: Questa non è una limitazione, è così che vanno le cose di design. Se hai già un 'main' e fa la cosa sbagliata, l'hai progettato male. –

+1

@ S.Lott: non è stato progettato in modo errato. Il metodo da solo fa esattamente ciò che deve fare. È un limite perché è un modulo non una classe che significa che è un raggruppamento di funzioni simili. I punti principali di quello che viene in genere chiamato, ma in questo caso ho bisogno di iniziare con una funzione non tipica, quindi la chiamata diretta. – Daniel

Problemi correlati