Tengo dos archivos: script1.py y script2.py. Necesito invocar script2.py desde script1.py y devolver el valor de script2.py a script1.py. Pero la captura es script1.py en realidad ejecuta script2.py a través de os.
script1.py:
import os print(os.system("script2.py 34"))
script2.py
import sys def main(): x="Hello World"+str(sys.argv[1]) return x if __name__ == "__main__": x= main()
Como puede ver, puedo obtener el valor en script2, pero no volver a script1. ¿Cómo puedo hacer eso? NOTA: script2.py TIENE que ser llamado como si fuera una ejecución de línea de comandos. Es por eso que estoy usando os.
Ok, si te entiendo correctamente quieres:
Te recomiendo usar el módulo de subproceso. La forma más fácil sería usar la función check_output () .
Ejecute el comando con argumentos y devuelva su salida como una cadena de bytes.
Solución de muestra:
script1.py
import sys import subprocess s2_out = subprocess.check_output([sys.executable, "script2.py", "34"]) print s2_out
script2.py:
import sys def main(arg): print("Hello World"+arg) if __name__ == "__main__": main(sys.argv[1])
La forma recomendada de devolver un valor de un “script” de python a otro es importar el script como un módulo de Python y llamar directamente a las funciones:
import another_module value = another_module.get_value(34)
donde another_module.py
es:
#!/usr/bin/env python def get_value(*args): return "Hello World " + ":".join(map(str, args)) def main(argv): print(get_value(*argv[1:])) if __name__ == "__main__": import sys main(sys.argv)
Podrías importar another_module
y ejecutarlo como un script desde la línea de comandos. Si no necesita ejecutarlo como una secuencia de comandos de línea de comandos, puede eliminar la función main()
y if __name__ == "__main__"
bloque if __name__ == "__main__"
.
Vea también, Llamar al script de python con entrada en un script de python usando subproceso .