Redirige la entrada con subprocess en Python.
¿Cómo puedo utilizar la redirección de entrada <()
con subprocess.Popen
de Python?
Por ejemplo, digamos que tengo:
import subprocess
class Test():
def __init__(self):
self.proc = subprocess.Popen(["sort file1.txt file2.txt"],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
def __iter__(self):
return self
def __next__(self):
while True:
line = self.proc.stdout.readline()
if not line:
raise StopIteration
return line.strip().decode('utf-8')
t = Test()
for line in t:
print(line)
Lo anterior funciona perfectamente bien, pero realmente necesito que el comando haga algo como:
sort <(python file1.txt) <(python file2.txt)
Sin embargo, eso no parece ejecutar nada, incluso esto no funciona:
sort <(cat file1.txt) <(cat file2.txt)
¿Cómo puedo hacer que esto funcione con subprocess de Python y recorrer los resultados línea por línea?
davy.ai
Para utilizar la redirección de entrada con
subprocess.Popen
, puedes utilizar la opciónsubprocess.PIPE
parastdin
en lugar destdout
. La redirección de entrada se puede pasar como una cadena al métodostdin.write()
del objetoPopen
. Aquí tienes un ejemplo de código que implementa la redirección de entrada utilizandosubprocess.Popen
:En el código anterior, creamos el subprocess con
stdin=subprocess.PIPE
en lugar destdout=subprocess.PIPE
. Luego abrimos los archivos utilizando la declaraciónwith
, codificamos la cadena de redirección de entrada y la pasamos al métodostdin.write()
del objetoPopen
. Finalmente, iteramos a través de la salida del subprocess línea por línea y la imprimimos.