Python3 Popen:我每次都必须使用.encode()吗?

时间:2016-07-02 16:47:37

标签: string python-3.x pipe subprocess

我有一个测试另一个程序的程序。它像这样使用Popen:

testProgram = subprocess.Popen(args, stdin = subprocess.PIPE, stdout = subprocess.PIPE)

在python2中,我向testProgram发送一条指令,如下所示:

testProgram.stdin.write("count "+vals[0]+"\n")

在python3中,write需要一个类似字节的对象而不是str。我认为这要求我在每次写作时使用类似testProgram.stdin.write(("count "+vals[0]+"\n").encode("utf-8"))的内容,但我显然不会这样做。

有没有一种简单的方法可以让Popen的stdin在python3中作为文本流工作,或者我应该坚持使用python2?参数universal_newlines = True looks like it should work ,但对我来说,该程序冻结在result = testProgram.stdout.readline()

1 个答案:

答案 0 :(得分:0)

使用universal_newlines=True是正确的解决方案,但在python3中,除非您将bufsize=1传递给Popen,否则输入不会在每个换行符处自动刷新。

为了使程序在python3中工作,Popen行成为:

testProgram = subprocess.Popen(args, stdin = subprocess.PIPE, stdout = subprocess.PIPE, universal_newlines = True, bufsize = 1)