2013-04-10 66 views
0

我想写一个启动子进程的python脚本,并写入子进程的stdin。
在这里,我可以写,并得到一个结果:子流程popen,如何获取访问权限?

def get_band(): 
    print "band" 
    p = subprocess.Popen(["/path/to/program","-c","-"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) 
    ran_stdout = p.communicate(input='show status')[0] 
    print(ran_stdout) 

然而print语句给出:

Unable to connect at 127.0.0.1, Connection refused. 

如果我这样做,显示同样的结果:

p = subprocess.Popen(["/path/to/program","-c","-"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 
print p[0] 

如果我从终端运行这个命令它工作正常,我可以得到结果。

给出的参数有什么问题? ["/path/to/program","-c","-"]

+2

这不是'[“/ path/to/program”,“ - c”,“ - ”]'不是子过程吗? – danodonovan 2013-04-10 09:22:23

+0

其实是的,我认为它会改变 – Paul 2013-04-10 09:25:28

+1

因此,无论'path/to/program'是什么,它都会产生你提供的错误(它似乎无法连接到本地主机)。当然,你应该考虑纠正程序的“路径/程序”? – danodonovan 2013-04-10 09:36:11

回答

0

这工作出于某种原因,传递命令在同一行。

p = subprocess.Popen(["/path/to/program", '-c', '-', cmd_here], 
    stdout=subprocess.PIPE) 
    proc_stdout, proc_stderr = proc.communicate() 
    proc.wait()