用输入执行程序

时间:2013-06-14 07:53:07

标签: python

我有一个程序,我想在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

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文本,请确保在转换为字节时使用正确的编码。