2017-10-11 12 views
0

我將bash代碼轉換爲python。如何知道錯誤是什麼時使用subprocess.run()在python與異常?

我通過python中的subprocess.run()使用bash的mkdir。

在以下示例中,subprocess.run()引發異常。

但是我無法檢查錯誤是什麼,因爲我無法通過 獲取由subprocess.run()返回的結果對象。

有什麼聰明的方法知道錯誤是什麼? 或者我不應該在這裏使用'嘗試例外'?

import sys 
import subprocess 

directory = '/tmp/test_dir' 
options = '' 

try: 

    result=subprocess.run(['mkdir', options, directory], check=True) 

except subprocess.CalledProcessError as ex: 

    print("In this example, subprocess.run() above raise an exception CalledProcessError.") 
    # print("I would like to check result.returncode = {0}. But it failed because object 'result' is not defined.".format(result.returncode)) 

except Exception as ex: 

    sys.stderr.write("This must not happen.") 
    sys.exit(1) 

非常感謝。

+0

只打印你抓住了'打印(前)在實際例外' – salparadise

+0

爲什麼不使用Python的'os.makedir'而不是創建一個子進程:)的? – tkhurana96

+0

@salparadise:謝謝你告訴我解決方案。這是我想要的。 – mora

回答

1

你總是可以做

import subprocess 

# make the subprocess 
pr = subprocess.Popen(['your', 'command', 'here'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

# blocks until process finishes 
out, err = pr.communicate() 

# check the return code 
if pr.returncode != 0: 
    sys.stderr.write("oh no") 
+0

謝謝你回答。也許我不應該用excepion使用子進程,即使它有一個異常機制。 – mora

相關問題