
Josh Smeton
tengo un script llamado test1.py
que no está en un módulo. Solo tiene un código que debe ejecutarse cuando se ejecuta el script. No hay funciones, clases, métodos, etc. Tengo otro script que se ejecuta como servicio. quiero llamar test1.py
desde el script que se ejecuta como un servicio.
Por ejemplo:
Expediente test1.py
:
print "I am a test"
print "see! I do nothing productive."
Expediente service.py
:
# Lots of stuff here
test1.py # do whatever is in test1.py
Conozco un método que es abrir el archivo, leer el contenido y básicamente evaluarlo. Supongo que hay una mejor manera de hacer esto. O al menos eso espero.
La forma habitual de hacer esto es algo como lo siguiente.
prueba1.py
def some_func():
print 'in test 1, unproductive'
if __name__ == '__main__':
# test1.py executed as script
# do something
some_func()
servicio.py
import test1
def service_func():
print 'service func'
if __name__ == '__main__':
# service.py executed as script
# do something
service_func()
test1.some_func()

alfa
Esto es posible en Python 2 usando
execfile("test2.py")
Ver el documentación para el manejo de espacios de nombres, si es importante en su caso.
En Python 3, esto es posible usando (gracias a @fantastory)
exec(open("test2.py").read())
Sin embargo, debería considerar usar un enfoque diferente; tu idea (por lo que puedo ver) no se ve muy limpia.

dick goodwin
De otra manera:
Archivo prueba1.py:
print "test1.py"
Archivo service.py:
import subprocess
subprocess.call("test1.py", shell=True)
La ventaja de este método es que no tiene que editar un script de Python existente para poner todo su código en una subrutina.
Documentación: Pitón 2, Pitón 3
import os
os.system("python myOtherScript.py arg1 arg2 arg3")
Usando os puedes hacer llamadas directamente a tu terminal. Si desea ser aún más específico, puede concatenar su cadena de entrada con variables locales, es decir.
command = 'python myOtherScript.py ' + sys.argv[1] + ' ' + sys.argv[2]
os.system(command)
Si desea que test1.py siga siendo ejecutable con la misma funcionalidad que cuando se llama dentro de service.py, haga algo como:
prueba1.py
def main():
print "I am a test"
print "see! I do nothing productive."
if __name__ == "__main__":
main()
servicio.py
import test1
# lots of stuff here
test1.main() # do whatever is in test1.py

flavio
yo prefiero escurridizo:
#!/usr/bin/env python
# coding: utf-8
import runpy
runpy.run_path(path_name="script-01.py")
runpy.run_path(path_name="script-02.py")
runpy.run_path(path_name="script-03.py")

thedz
No deberías estar haciendo esto. En su lugar, haz:
prueba1.py:
def print_test():
print "I am a test"
print "see! I do nothing productive."
servicio.py
#near the top
from test1 import print_test
#lots of stuff here
print_test()
La mejor manera es escribir métodos y clases y usarlos.
– Aamir
27 de julio de 2009 a las 7:00
relacionado: Python 3: Llame a la secuencia de comandos de python con entrada en una secuencia de comandos de python usando un subproceso
– jfs
29 de noviembre de 2015 a las 8:40
Nadie ha publicado un
runpy.run_module
respuesta todavía?!– Aran Fey
7 de mayo de 2019 a las 7:16