Quiero invocar un script, canalizando el contenido de una cadena a su stdin y recuperando su stdout.pasando datos a subprocess.check_output
No quiero tocar el sistema de archivos real, así que no puedo crear archivos temporales reales para él.
usando subprocess.check_output
Puedo obtener lo que escriba el script; ¿cómo puedo obtener la cadena de entrada en su stdin sin embargo?
subprocess.check_output([script_name,"-"],stdin="this is some input")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "/usr/lib/python2.7/subprocess.py", line 1043, in _get_handles
p2cread = stdin.fileno()
AttributeError: 'str' object has no attribute 'fileno'
El 'stdin' arg para' check_output() 'debe ser un objeto de archivo, no una cadena. – jdi
@jdi obviamente; Entonces, ¿cómo darle algo que grazna como un archivo pero no es un archivo? – Will
Al elegir @larsmans responder :-) es mucho más fácil si no intentas usar en exceso la función de conveniencia 'check_output' y simplemente haces un Popen + comunico normal. De lo contrario, se espera que abra su propia tubería manualmente antes de la mano, y luego la pase a 'check_output (stdin)' y luego escriba en ella. – jdi