【发布时间】:2016-11-04 20:50:48
【问题描述】:
我有一个用于测试另一个程序的程序。它像这样使用 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 的标准输入在 python3 中作为文本流工作,还是我应该坚持使用 python2? 参数universal_newlines = True looks like it should work,但对我来说,程序只是冻结在result = testProgram.stdout.readline()。
【问题讨论】:
-
程序是什么,你在输入什么?
-
这是一个“事件计数器”。我真的不知道这意味着什么,但我知道它应该做什么。它应该从文件中读取 AVL 树,然后检查标准输入以获取更多说明。该脚本输入了几千条指令,并确保条目正确,并且树的大小不会增长到超出必要的范围。
-
universal_newlines = True应该可以工作,所以我唯一想到的是可能存在一些编码问题docs.python.org/3.2/library/… -
那我可能问错问题了。如果
universal_newlines = true是正确答案,那么关于result = testProgram.stdout.readline()的某些内容是不正确的。
标签: string python-3.x pipe subprocess