2009-12-20 11 views
5

Soy muy nuevo en la programación, así que me disculpo por adelantado si mi pregunta es demasiado tonta.¿Por qué este código se comporta de manera diferente en Python3.1 que en Python2.6?

#!/usr/bin/python2.6 
import subprocess, time 
p=subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
for i in 'abcd': 
    p.stdin.write(str.encode(i+'\n')) 
    output=p.stdout.readline() 
    print(output) 
    time.sleep(1) 

ejecución de este código en Python 2.6 imprime letras a, b, c, d, cada línea de salida aparece después de un segundo. Este es el comportamiento esperado. Pero en Python 3.1 la ejecución está bloqueada en la línea output=p.stdout.readline(). ¿Cómo corregir esto para Python 3.1?

+0

qué es exactamente lo que sucede cuando la ejecución se bloquea? ¿Tienes un error que podrías mostrar? – Ben

+0

no hay errores, solo solicita ayuda; este código se ejecutó en la ventana de terminal –

+5

Supongo que podrían ser diferencias en el almacenamiento en búfer; ¿algo cambia si agrega una llamada a p.stdin.flush después de la escritura? –

Respuesta

3

Parece ser una diferencia en el almacenamiento en búfer. Agregar una llamada p.stdin.flush() resolvió el problema. (Ver los comentarios arriba).

Wiki de la comunidad ya que no merezco créditos para esta respuesta, pero algunas respuestas deben marcarse como aceptadas.

[@Geo Pop.: Por favor, "aceptar" a esta pregunta, ya que al parecer es correcta]

Cuestiones relacionadas