我有一个程序,我想在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
。
答案 0 :(得分: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)
答案 1 :(得分:0)
根据the python documentation,您应该传递bytes
而不是字符串:
输入类型必须是字节,如果universal_newlines为True,则为字符串。
警告:如果您编码非asccii文本,请确保在转换为字节时使用正确的编码。