2010-01-22 19 views
10

Mam funkcję "wiadomości e-mail z alarmem" wewnątrz modułu Pythona. Chcę móc wywoływać tę funkcję ze skryptu bash. Wiem, że możesz wywołać moduł za pomocą "pythona" w skrypcie, ale nie jestem, jeśli możesz i jak nazwałbyś określoną funkcję w module.Wywołanie funkcji Pythona ze skryptu bash

Odpowiedz

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

co jeśli chcesz przekazać ciąg znaków do funkcji Pythona? lub po prostu wydrukować "cześć"? 'python -c 'print (" hello ")" 'nie działa. – mango

+1

@mango - Niepoprawnie - argumenty działają. W rzeczywistości skopiowałem i wkleiłem twój przykład, a następnie przetestowałem ponownie używając "python3" i "python2". Możesz mieć inny problem. –

+0

Co zrobić, jeśli moduł Pythona znajduje się w innym katalogu? – Chaos

13

Można użyć opcji -c:

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

Modyfikuj, jak trzeba.

2

Aby wywołać określoną funkcję w module, zapewniam, że moduł ma następujący:

if __name__ == "__main__": 
    the_function_to_call() 

Następnie można po prostu zrobić to w skrypcie powłoki.

python module.py 

Albo

python -m module 

W zależności od tego, czy modułu na PYTHONPATH.

+0

To działałoby tylko wtedy, gdy nie masz jeszcze głównej lub już głównej, która wskazywała na potrzebną funkcję. W moim przypadku istnieje już główna i wskazuje na inną funkcję w module, więc nie było to możliwe. – Daniel

+0

@Daniel: To nie jest ograniczenie, tak właśnie wyglądają twoje rzeczy. Jeśli masz już 'main' i robi źle, źle to zaprojektowałeś. –

+1

@ S.Lott: To nie jest źle zaprojektowane. Metoda sama w sobie robi dokładnie to, co musi. Jest to ograniczenie, ponieważ jego moduł nie jest klasą, co oznacza, że ​​jest grupą podobnych funkcji. Główne punkty tego, który jest zwykle nazywany, ale w tym przypadku muszę zacząć od nietypowej funkcji, a więc bezpośredniego połączenia. – Daniel

Powiązane problemy