0

Quiero ejecutar varios programas similares uno tras otro en la terminal.

archivo1.py
archivo2.py
archivo3.py

No debo unir los 3 archivos y crear 1 solo con las funciones de los tres, lo que estoy buscando es que pueda crear un archivo nuevo con una funcion que llame a esos 3 archivos a ejecutarse!

Una posible solucion es esta pero no me funciona:

import archivo1
import archivo2
import archivo3
if __name__ == "__main__":

no se que poner luego de los dos puntos y si los archivos no van con el .py y comillas o algo

Desde ya muchas gracias

Saludos

Martin Bouhier
  • 727
  • 2
  • 14
  • 33

2 Answers2

2

La forma más simple es usando os.system()

import os

os.system("python archivo1.py")
os.system("python archivo2.py")
os.system("python archivo3.py")

Sino, otra forma que ofrece mayor control es usando subprocess que vale la pena ver la documentación

import subprocess

process1 = subprocess.Popen(['python', 'archivo1.py'])
process2 = subprocess.Popen(['python', 'archivo2.py'])
process3 = subprocess.Popen(['python', 'archivo3.py'])
Patricio Moracho
  • 54,367
  • 12
  • 35
  • 68
0

El método propuesto por Patricio permite crear un proceso por cada uno de los módulos. Es una buena opción si solo vas a ejecutar los script. Recuerda dar permisos de ejecución a los script para el usuario oportuno.

También puedes simplemente importarlos. Esto simplemente ejecutará el contenido de cada script secuecialmente en el orden de los imports:

main.py:

import archivo1
import archivo2
import archivo3

El archivo debe estar en el mismo directorio que los tres archivos anteriores.

El código de cada modulo es ejecutado excepto aquel que tengas dentro de:

if __name__ == "__main__":

Para saber más sobre la sentencia anterior se puede ver la siguiente publicación:

¿Qué es if __name__ == “__main__”:?


Edición:

El problema es que al incluir el carácter "$" en el nombre de tu módulo no es un identificador valido y no puede ser importado. Por norma general no deberías nombrar tus módulos con identificadores no válidos, no obstante, puedes importar de la siguiente forma:

archivo1 = __import__('archivoMW$1')
archivo2 = __import__('archivoMW$2')
archivo3 = __import__('archivoMW$3')

O simplemente:

__import__('archivoMW$1')
__import__('archivoMW$2')
__import__('archivoMW$3')

Repito que lo ideal seria nombrar los módulos con identificadores válidos.

FJSevilla
  • 55,603
  • 7
  • 35
  • 58