我有一个测试另一个程序的程序。它像这样使用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()
。
答案 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)