2013-04-10 30 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()