0

我有一个程序,我想在 for 循环中执行更改输入。

import subprocess
for num in range(StartingPoint, EndingPoint):
 p = subprocess.Popen("C:\\Programming\\simple\\Simple_C\\bin\\Simple_C.exe",
                   shell=True,
                   stdin=subprocess.PIPE,
                   stdout=subprocess.PIPE)
 p.communicate(input='%d\n' % num)
output = p.communicate()[0]
print (output)

但我得到这个错误:

TypeError: 'str' 不支持缓冲区接口

程序要求输入一个数字,Python 应该给它“num”,有没有更好的解决方案?我正在使用 Python 版本3.3.2

4

2 回答 2

1

改用字节

import subprocess
for num in range(StartingPoint, EndingPoint):
    p = subprocess.Popen("C:\\Programming\\simple\\Simple_C\\bin\\Simple_C.exe",
                shell=True,
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE)
    p.communicate(input=('%d\n'%num).encode())
    output = p.communicate()[0]
    print (output)
于 2013-06-14T07:54:07.407 回答
0

根据python文档,您应该传递bytes而不是字符串:

输入的类型必须是字节,或者如果universal_newlines 为True,则为字符串。

警告:如果您对非 asccii 文本进行编码,请确保在转换为字节时使用正确的编码。

于 2013-06-14T08:09:48.643 回答