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.
davy.ai
Una forma de lograr esto es utilizando la clase
Popen
del módulosubprocess
y comunicándose con el proceso secundario a través de sustdin
ystdout
. Aquí tienes un ejemplo: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ámetrosstdin
ystdout
para permitirnos comunicarnos con el proceso secundario. Utilizamos el métodocommunicate
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.