2010-01-22 35 views
10

Tengo una función de "correo electrónico de alarma" dentro de un módulo python. Quiero poder llamar a esta función desde un script bash. Sé que puedes llamar a un módulo usando 'python' en el script, pero no estoy si puedes o cómo llamarías a una función específica dentro del módulo.Llamar a una función python desde el script bash

Respuesta

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

¿y si quieres pasar una cadena a la función python? o simplemente imprimir hola? 'python -c 'print (" hello ")'' no funciona. – mango

+1

@mango - Incorrecto - los argumentos SI funcionan. Copié y pegué tu ejemplo, de hecho, y luego volví a probar usando tanto 'python3' como 'python2'. Puede tener un problema diferente. –

+0

¿Qué sucede si el módulo python está en otro directorio? – Chaos

13

Usted puede utilizar la opción -c:

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

Modificar como sea necesario.

2

llamar a una función específica en un módulo, asegurar que el módulo tiene la siguiente:

if __name__ == "__main__": 
    the_function_to_call() 

, entonces solo puede hacer esto en su secuencia de comandos shell.

python module.py 

O

python -m module 

Dependiendo de si o no las del módulo en el PYTHONPATH.

+0

Esto solo funcionaría si aún no tienes un main o ya tienes un main que apunta a la función que necesitas. En mi caso, ya hay un main y apunta a otra función en el módulo, por lo que esta no era una opción. – Daniel

+0

@Daniel: Eso no es una limitación, así es como diseñan las cosas. Si ya tiene un 'main' y hace lo incorrecto, lo ha diseñado mal. –

+1

@ S.Lott: No está diseñado mal. El método en sí mismo hace exactamente lo que necesita hacer. Es una limitación porque es un módulo, no una clase, lo que significa que es una agrupación de funciones similares. Los puntos principales en el que normalmente se llama, pero en este caso necesito comenzar con una función no típica, por lo tanto, la llamada directa. – Daniel

Cuestiones relacionadas