Ejecutando un script de Python desde otro script con un argumento de línea de comando que lo incluye como ejecutable.
Estoy intentando correr un script de Python dentro de otro script de Python. Esto se ejecutará 10 veces y producirá 10 salidas.
Quiero correr “program1.py” dentro de “program2.py”. Ahora, “program1.py” inicialmente tomaba un ejecutable de C dentro de él y tomaba 1 argumento de línea de comandos.
“Program1.py” se ve así:
import os
import sys
dataset = sys.argv[1]
os.system(f”/home/Dev/c4.5 -u -f {dataset}”)
os.system(f”/home/Dev/c4.5rules -u -f {dataset}”)
os.system(f”/home/Dev/c4.5rules -u -f {dataset} > Temp”)
f = open(‘Temp’)
Algo de código
Donde “c4.5” y “c4.5rules” son los nombres de los archivos ejecutables. Para correr esto, estaba usando “python3 program1.py nombre_del_dataset”.
Ahora estoy tratando de poner “program1.py” dentro de “program2.py” y estoy tratando este enfoque a continuación:
import os
import subprocess
Algun código
for track in range(0, 10):
with open(f’Train_{track}’, ‘r’) as firstfile, open(f’DF_{track}.data’, ‘w’) as secondfile:
for line in firstfile:
secondfile.write(line)
os.system(“/home/Dev/program1.py DF_track”)
#subprocess.Popen(“/home/Dev/program1.py DF_track”, shell=True)
Donde simplemente quiero obtener la salida de “program1.py” 10 veces y quiero usar “DF_track” como la entrada de línea de comandos para cada generación de salida.
Usando el enfoque anterior, estoy obteniendo muchos errores. Por favor ayuda.
Edit_1:
De hecho, cada vez que intento ejecutarlo, mi cursor no funciona, se congela, por lo que no puedo copiar los errores.
Aquí hay algunos de ellos:
- intento de realizar una operación no permitida por la política de seguridad.
- error de sintaxis: se espera una palabra (esperando “).”)
davy.ai
Parece que pueda haber algunos errores de sintaxis en su código. Un problema que puedo ver es que en la línea
os.system("/home/Dev/program1.py DF_track")
, está pasando la cadena"DF_track"
como argumento aprogram1.py
, mientras que debería pasar la variableDF_track
. Para corregir esto, puede utilizar f-strings así:os.system(f"/home/Dev/program1.py {DF_track}")
.Otro problema podría estar relacionado con la política de seguridad de su sistema. Es posible que se esté bloqueando la ejecución del subproceso debido a la configuración de seguridad de su máquina. Es recomendable que verifique con su equipo de IT o administrador del sistema para saber si existen restricciones en la ejecución de subprocesos desde scripts de Python.
En lugar de utilizar
os.system
, puede probar utilizando el módulosubprocess
para ejecutar su scriptprogram1.py
. Aquí hay un ejemplo:Esto ejecutará
program1.py
con el argumentonombre_dataset
10 veces. Puede reemplazarConjuntoDatos_{i}.txt
con el nombre de archivo de sus datos de entrada. La funciónsubprocess.run
esperará a que el proceso finalice y devolverá un objetoCompletedProcess
. Puede inspeccionar las salidasstdout
ystderr
de este objeto para ver si hubo errores.¡Espero que esto sea de ayuda! Hágamelo saber si tiene alguna otra pregunta.