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''])