我在這裏遇到一些問題,試圖使用subprocess.Popen。我不能使用subprocess.Call來編寫我正在編寫的腳本,因爲我希望能夠爲我的執行指定環境,而我只能通過方法的參數在Popen中這樣做。我注意到subprocess.Popen需要更長的時間來完成該子進程。調用,並且這在我的腳本中產生了下游問題,因爲我的腳本的其餘部分依賴於產生的進程的退出代碼(返回代碼)來決定(通過一組有條件的If語句)進行適當的操作。如何確保腳本僅在子進程完成後執行後續方法
涉及使用子過程的方法是:
def execute_local(self):
'''
Spawns a test execution process locally and directs the standard output and
error streams from the process to the appropriate log files.
'''
self.return_code = subprocess.Popen(args = self.cmd_string,
stdout = open(self.out_log_filepath, 'w'),
stderr = open(self.err_log_filepath, 'w'),
shell = True)
我還沒有指定的ENV參數還沒有,因爲我需要確保這個工程之前,我可以繼續前進。
和包含該條件語句後續方法是:
def get_status(self):
'''
Returns a string named either passed or failed back to itself, depending on
exit status of the process that was spawned in the execute_local method.
This is important for main.py to be able to examine the status of the test
processes and take appropriate administrative actions to either continue to
a new test step or retry a give test.
'''
print self.return_code
if self.return_code == 0:
return 'passed'
else:
return 'failed'
在更高層次的模塊,所述方法將被稱爲按照以下順序:execute_local ---接着----> GET_STATUS。
此前,當我通過調用完成此操作時,執行過程順利進行到條件,但現在與Popen不同。當我嘗試使用print語句打印出由子進程產生的進程的返回代碼時(我在get_status方法中添加了print self.return_code語句,如下所示),我發現通過調用,我實際看到返回代碼,但與Popen,我得到的是對象本身和它的內存地址。
我非常感謝這方面的幫助,如果有人能向我解釋爲什麼Popen比打電話要花更多時間才能跑步。
非常感謝!
非常感謝您的回答!這澄清。我認爲他們應該在Pydocs中加入env參數(以及所有其他參數),否則它會使得看起來好像call缺少Popen所具有的某些功能。 – AKKO