Si hago lo siguiente:Python - ¿Cómo paso una cadena al subproceso.Popen (usando el argumento stdin)?
import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
me sale:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles
p2cread = stdin.fileno()
AttributeError: 'cStringIO.StringI' object has no attribute 'fileno'
parecer un objeto cStringIO.StringIO no Quack lo suficientemente cerca de un pato archivo para que se adapte subprocess.Popen. ¿Cómo trabajo alrededor de esto?
En lugar de disputar mi respuesta con esta siendo eliminada, estoy añadiendo como un comentario ... Lectura recomendada: [Python de Doug Hellmann Módulo de la publicación de blog de la semana en el subproceso] (http://www.doughellmann.com/PyMOTW/subprocess/). –
la publicación del blog contiene múltiples errores, por ejemplo, [el primer ejemplo de código: 'call (['ls', '-1'], shell = True)'] (http://www.doughellmann.com/PyMOTW/subprocess /) Es incorrecto. Recomiendo leer [preguntas comunes de la descripción de la etiqueta del subproceso] (http://stackoverflow.com/tags/subprocess/info) en su lugar. En particular, [¿Por qué el subproceso.Popen no funciona cuando args es la secuencia?] (Http://stackoverflow.com/q/2400878/4279) explica por qué 'call (['ls', '-1'], shell = Verdadero) 'es incorrecto. Recuerdo haber dejado comentarios en la publicación del blog, pero ahora no los veo por algún motivo. – jfs