2015-07-20 401 views
1
import subprocess 
cd=['sudo','./interface','-a','</tmp/vol.js'] 
p = subprocess.Popen(cd, stdout = subprocess.PIPE,stderr=subprocess.PIPE, stdin=subprocess.PIPE) 

上面的代碼返回null,但是當我即sudo ./interface -a </tmp/vol.js作品完全罰款Python的subprocess.popen返回空字符串

回答

1

您正在使用相同的運行相同的命令shell特定的重定向語法</tmp/vol.js),但沒有按subprocess.Popen()」在shell中運行你的命令。

你需要無論是在shell中運行命令(通過在,而不是一個列表,並設置shell=True),或打開vol.js自己和編寫通過您打開stdin管的過程:

import subprocess 
command = ('sudo', './interface', '-a') 
with open('/tmp/vol.js') as input_stream: 
    p = subprocess.Popen(command, stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE, stdin=input_stream) 
    stdout, stderr = p.communicate() 

注意,我在打開vol.js文件對象作爲這裏的輸入流通過。

+0

P = subprocess.Popen( 「須藤./interface -a

+0

@GouthamHM:爲什麼在這種情況下將'stdin'設置爲管道?您通過'<'重定向提供輸入,因此給shell提供額外的輸入可能導致某些內容等待。 –

+0

@GouthamHM:另外,我假設你已經設置'sudo'來不要求這個命令的密碼。 –

1

你可以試試這個。

import subprocess 
cd = ['sudo','./interface','-a','</tmp/vol.js'] 
cd_cmd = " ".join(cd) 
o, e = subprocess.Popen(cd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 

的輸出被存儲在可變的 「o」 和 「e」 的標準錯誤