Python: Ejecuta la función desde la línea de comando


5 Answers

Simplemente ponga hello() algún lugar debajo de la función y se ejecutará cuando lo haga python your_file.py

Para una solución más ordenada puedes usar esto:

if __name__ == '__main__':
    hello()

De esta forma, la función solo se ejecutará si ejecuta el archivo, no cuando lo importe.

Question

Tengo el siguiente código en mi archivo:

def hello():
    return 'Hi :)'

¿Cómo podría ejecutar esto desde la línea de comando?




Siempre es una opción ingresar python en la línea de comando con el comando python

luego importa tu archivo así que importa archivo_empleo

luego ejecuta el comando con example_file.hello ()

Esto evita la extraña función de copia .pyc que surge cada vez que ejecuta python -c, etc.

Tal vez no sea tan conveniente como un solo comando, pero es una buena solución rápida para enviar un mensaje de texto desde la línea de comando, y le permite usar python para llamar y ejecutar su archivo.




Tenía un requerimiento de usar varias utilidades de Python (rango, cadena, etc.) en la línea de comando y había escrito la herramienta pyfunc específicamente para eso. Puede usarlo para enriquecer su experiencia de uso de línea de comandos:

 $ pyfunc -m range -a 1 7 2
 1
 3
 5

 $ pyfunc -m string.upper -a test
 TEST

 $ pyfunc -m string.replace -a 'analyze what' 'what' 'this'
 analyze this



Si instala el paquete runp con pip install runp es cuestión de ejecución:

runp myfile.py hello

Puede encontrar el repositorio en: https://github.com/vascop/runp




Escribí un pequeño script rápido de Python que se puede llamar desde una línea de comando bash. Toma el nombre del módulo, la clase y el método que desea llamar y los parámetros que desea pasar. Lo llamo PyRun y ​​dejé la extensión .py y lo hice ejecutable con chmod + x PyRun para poder llamarlo rápidamente de la siguiente manera:

./PyRun PyTest.ClassName.Method1 Param1

Guarde esto en un archivo llamado PyRun

#!/usr/bin/env python
#make executable in bash chmod +x PyRun

import sys
import inspect
import importlib
import os

if __name__ == "__main__":
    cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
    if cmd_folder not in sys.path:
        sys.path.insert(0, cmd_folder)

    # get the second argument from the command line      
    methodname = sys.argv[1]

    # split this into module, class and function name
    modulename, classname, funcname = methodname.split(".")

    # get pointers to the objects based on the string names
    themodule = importlib.import_module(modulename)
    theclass = getattr(themodule, classname)
    thefunc = getattr(theclass, funcname)

    # pass all the parameters from the third until the end of 
    # what the function needs & ignore the rest
    args = inspect.getargspec(thefunc)
    z = len(args[0]) + 2
    params=sys.argv[2:z]
    thefunc(*params)

Aquí hay un módulo de muestra para mostrar cómo funciona. Esto se guarda en un archivo llamado PyTest.py:

class SomeClass:
 @staticmethod
 def First():
     print "First"

 @staticmethod
 def Second(x):
    print(x)
    # for x1 in x:
    #     print x1

 @staticmethod
 def Third(x, y):
     print x
     print y

class OtherClass:
    @staticmethod
    def Uno():
        print("Uno")

Intenta ejecutar estos ejemplos:

./PyRun PyTest.SomeClass.First
./PyRun PyTest.SomeClass.Second Hello
./PyRun PyTest.SomeClass.Third Hello World
./PyRun PyTest.OtherClass.Uno
./PyRun PyTest.SomeClass.Second "Hello"
./PyRun PyTest.SomeClass.Second \(Hello, World\)

Tenga en cuenta el último ejemplo de escape de los paréntesis para pasar en una tupla como el único parámetro para el segundo método.

Si pasa muy pocos parámetros para lo que el método necesita, obtiene un error. Si pasa demasiados, ignora los extras. El módulo debe estar en la carpeta de trabajo actual, poner PyRun puede estar en cualquier lugar en su camino.




Use la herramienta python-c ( pip install python-c ) y luego simplemente escriba:

$ python-c foo 'hello()'

o en caso de que no tenga conflictos de nombre de función en sus archivos de Python:

$ python-c 'hello()'





Related