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.

Enviar automáticamente las entradas a otro script de Python.

Tengo un script de Python que acepta 2 entradas de usuario antes de hacer algo. Estoy en una posición en la que ahora necesito ejecutar el script varias veces, con diferentes valores para cualquiera de las 2 entradas. Preferiría no tener que volver a ejecutar el script e ingresar manualmente los valores cada vez, ya que tengo más de 100 combinaciones diferentes.
Creo que esto se puede hacer de manera bastante fluida en Python.

Aquí hay un ejemplo: input.py

import pandas as pd

# Variables para la entrada del usuario
print("Por favor ingrese su nombre:")
UserInput = input()
name = str(UserInput)
print("Ahora ingrese su cargo:")
UserInput2 = input()
job = str(UserInput2)

# Crear nombre de archivo con nombre y fecha actual
currenttime = pd.to_datetime('today').strftime('%d%m%Y')
filename = name + '_' + currenttime + ".csv"

print('\nHola ' + name + '. ')
print('Espero que tu trabajo como ' + job + ' esté yendo bien.')
print("He guardado tus entradas en " + filename)
print('Hablamos pronto. Adiós.')

# Crear DataFrame, agregar entradas y guardar en csv
series = pd.Series({'Nombre': name, 'Cargo': job})
df = pd.DataFrame([series])
df.to_csv(filename, index=False)

A continuación se muestra mi intento de enviar automáticamente las entradas a input.py usando el módulo subprocess (puede que no sea el enfoque correcto). El archivo llama a input.py correctamente, pero no puedo encontrar qué otros argumentos debo agregar para enviar los valores especificados.
Código utilizado: auto.py

import subprocess
subprocess.run(['python', 'input.py'])

Esto no funciona:

subprocess.run(['python', 'input.py', 'Tim', 'Doctor'])
subprocess.run(['python', 'input.py'], input=('Tim', 'Doctor'))
subprocess.run(['python', 'input.py'], stdin=('Tim', 'Doctor'))

Idealmente, quiero tener una lista de las diferentes entradas que quiero enviar al script para que se repita y agregue el segundo conjunto de entradas, repita nuevamente y el tercer conjunto, y así sucesivamente. No estoy seguro si estoy usando el método subprocess correcto. Cualquier ayuda sería muy apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es utilizando la clase Popen del módulo subprocess y comunicándose con el proceso secundario a través de su stdin y stdout. Aquí tienes un ejemplo:

    import subprocess
    
    # Lista de combinaciones de entrada
    inputs = [
        ('Tim', 'Doctor'),
        ('Mary', 'Engineer'),
        ('John', 'Teacher')
    ]
    
    for name, job in inputs:
        # Iniciar un nuevo proceso secundario
        p = subprocess.Popen(['python', 'input.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    
        # Enviar las entradas al proceso secundario
        out, err = p.communicate(input='{}\n{}'.format(name, job).encode())
    
        # Imprimir la salida del proceso secundario
        print(out.decode())
    

    En este ejemplo, creamos una lista de combinaciones de entrada y recorremos cada una de ellas. Luego, iniciamos un nuevo proceso secundario utilizando Popen, pasando los parámetros stdin y stdout para permitirnos comunicarnos con el proceso secundario. Utilizamos el método communicate para enviar las entradas al proceso secundario y capturar su salida. Por último, imprimimos la salida del proceso secundario.

    Esto te permitirá ejecutar tu script varias veces con diferentes valores de entrada sin tener que introducirlos manualmente cada vez.

Comments are closed.