¿Cómo llamar a un script desde otro script?

Resuelto Josh Smeaton asked hace 15 años • 17 respuestas

Tengo un script llamado test1.pyque no está en un módulo. Simplemente tiene un código que debería ejecutarse cuando se ejecuta el script. No hay funciones, clases, métodos, etc. Tengo otro script que se ejecuta como servicio. Quiero llamar test1.pydesde el script que se ejecuta como servicio.

Por ejemplo:

Archivo test1.py:

print "I am a test"
print "see! I do nothing productive."

Archivo service.py:

# Lots of stuff here
test1.py # do whatever is in test1.py
Josh Smeaton avatar Jul 27 '09 13:07 Josh Smeaton
Aceptado

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()
ars avatar Jul 27 '2009 07:07 ars

Esto es posible en Python 2 usando execfile:

execfile("test2.py")

En Python 3, esto es posible usando exec:

exec(open("test2.py").read())

Consulte la documentación para el manejo de espacios de nombres, si es importante en su caso.

Sin embargo, debería considerar utilizar un enfoque diferente; Tu idea (por lo que puedo ver) no parece muy limpia.

balpha avatar Jul 27 '2009 07:07 balpha

De otra manera:

Archivo prueba1.py:

print "test1.py"

Servicio de archivo.py:

import subprocess

subprocess.call("test1.py", shell=True)

La ventaja de este método es que no es necesario editar un script de Python existente para poner todo su código en una subrutina.

Documentación: Python 2 , Python 3

Dick Goodwin avatar Jun 27 '2012 16:06 Dick Goodwin
import os

os.system("python myOtherScript.py arg1 arg2 arg3")  

Utilizando el sistema operativo podrás realizar 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)
Alex Mapley avatar Dec 05 '2016 08:12 Alex Mapley