在python 2.7中,这可以工作并返回预期的字符串it works!
process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
process.stdin.write('echo it works!\n')
print process.stdout.readline()
当我知道在python 3.4中尝试这个时,它会陷入readline命令
process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
process.stdin.write(bytes('echo it works!\n','UTF-8'))
print(process.stdout.readline().decode('UTF-8'))
答案 0 :(得分:3)
关于缓冲的提示很有帮助。可以在Subprocess库模块文档中找到以下信息:
bufsize将作为open()的相应参数提供 创建stdin / stdout / stderr管道文件对象时的函数:
0表示无缓冲(读写是一个系统调用,可以返回短路)
1表示行缓冲(仅当universal_newlines = True时才可用,即在文本模式下)
和
如果universal_newlines为False,则文件对象为stdin,stdout和 stderr将作为二进制流打开,并且没有行结束转换 完了。
如果universal_newlines为True,则将打开这些文件对象 使用locale.getpreferredencoding(False)返回的编码以通用换行模式播放文本流
将所有内容放在一起会产生以下Python3代码:
import subprocess
process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True)
process.stdin.write('echo it works!\n')
print(process.stdout.readline())