devuelve el valor de un script de Python a otro

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:

  • pasar un argumento a otro script
  • recuperar una salida de otro script para el llamador original

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 .