2015-08-31 117 views
0

第一卷具有run_cmd函數從我給一個命令返回輸出2:
錯誤,當我打電話從蟒

def run_cmd(exe): 
    p = subprocess.Popen(exe, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) 
    return p.communicate()[0] 

我可以像bcdedit /vformatetc運行命令,但是當我打電話vol C: ,如: run_cmd('vol C:)我將收到錯誤:
WindowsError: [Error 2] The system cannot find the file specified。 但是,如果我運行cmd命令vol c:它的工作。
那麼,我做錯了什麼?謝謝!

回答

1

這是因爲subprocess.Popen默認預計可執行文件或代表argv被叫過程,這在你的情況下,它會尋找居然叫"vol C:"可執行文件的列表(而不是一個叫做vol.exe或類似的可執行文件)。也就是說,除非你指定shell=True(這意味着外殼將用於解析CMDLINE):

def run_cmd(cmdline): 
    p = subprocess.Popen(cmdline, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell=True) 
    return p.communicate()[0] 

run_cmd('vol C:') 

否則,您必須提供以列表形式在命令行:

def run_cmd(argv): 
    p = subprocess.Popen(argv, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) 
    return p.communicate()[0] 

run_cmd(['vol', 'C:']) 
+0

感謝您的解釋! – VladutZzZ

0

請做小修改。

import subprocess 
p = subprocess.Popen("vol c:", stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell=True) 
print p.communicate()[0] 

輸出繼電器

C:\Users\Administrator\Desktop>python chk.py 
Volume in drive C has no label. 
Volume Serial Number is 2A3D-7B34 
+1

什麼小的修改?沒有解釋的代碼傾銷並不是很有用。 –

相關問題