usar tutorial script español ejecutar desde consola como comandos archivos archivo python python-3.x subprocess

tutorial - Llamar a un script de Python con entrada dentro de un script de Python usando un subproceso



manual de python 3.6 en español pdf (2)

Otra forma de lo mencionado es mediante el uso de la función integrada exec
Esta función obtiene una cadena de código python y la ejecuta
Para usarlo en un archivo de script, simplemente puede read como un archivo de texto, como tal:

#dir is the directory of a.py #a.py, for example, contains the variable ''x=1'' exec(open(dir+''//a.py'').read()) print(x) #outputs 1

Tengo un script a.py y, mientras lo a.py , pedirá ciertas consultas al usuario y enmarcará la salida en formato json. Utilizando el subproceso de python, puedo llamar a este script desde otro script llamado b.py ¿Todo funciona como se esperaba, excepto que no puedo obtener la salida en una variable? Estoy haciendo esto en Python 3.


Para llamar a un script de Python desde otro utilizando el módulo de subprocess y pasarle alguna entrada y obtener su salida:

#!/usr/bin/env python3 import os import sys from subprocess import check_output script_path = os.path.join(get_script_dir(), ''a.py'') output = check_output([sys.executable, script_path], input=''/n''.join([''query 1'', ''query 2'']), universal_newlines=True)

donde la función get_script_dir() se define aquí .

Una alternativa más flexible es importar el módulo a.py llamar a una función para obtener el resultado (asegúrese de que a.py use if __name__=="__main__" guard, para evitar ejecutar código indeseable en la importación):

#!/usr/bin/env python import a # the dir with a.py should be in sys.path result = [a.search(query) for query in [''query 1'', ''query 2'']]

Puede usar el mutliprocessing para ejecutar cada consulta en un proceso separado (si realizar una consulta requiere mucha CPU, podría mejorar el rendimiento del tiempo):

#!/usr/bin/env python from multiprocessing import freeze_support, Pool import a if __name__ == "__main__": freeze_support() pool = Pool() # use all available CPUs result = pool.map(a.search, [''query 1'', ''query 2''])