es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

  1. intento de realizar una operación no permitida por la política de seguridad.
  2. error de sintaxis: se espera una palabra (esperando “).”)
Tags:  , , ,

Answer

  1. Avatar for 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 a program1.py, mientras que debería pasar la variable DF_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ódulo subprocess para ejecutar su script program1.py. Aquí hay un ejemplo:

    import subprocess
    
    for i in range(10):
        nombre_dataset = f"ConjuntoDatos_{i}.txt"
        subprocess.run(["python3", "program1.py", nombre_dataset])
    

    Esto ejecutará program1.py con el argumento nombre_dataset 10 veces. Puede reemplazar ConjuntoDatos_{i}.txt con el nombre de archivo de sus datos de entrada. La función subprocess.run esperará a que el proceso finalice y devolverá un objeto CompletedProcess. Puede inspeccionar las salidas stdout y stderr de este objeto para ver si hubo errores.

    ¡Espero que esto sea de ayuda! Hágamelo saber si tiene alguna otra pregunta.

Comments are closed.