[英]python: subprocess calling a script which runs a background process hanging
我在調用腳本時使用subprocess.call時遇到問題,這些腳本又運行后台進程。
我正在從python腳本調用bash腳本。 python 2.7.3。
#!/bin/python
from subprocess import call
.
.
call(["run_exp",file_name])
print "exp complete!"
.
.
run_exp
是一個bash腳本,可在后台運行進程。
#!/bin/bash
.
.
run_task auto_output 2>/dev/null &
.
.
echo "run_exp finished!"
run task
命令是另一個bash腳本。 這總是在run_exp
完成時完成。
從命令行運行run_exp
,我看到了預期的行為,所有進程完成了。
當我使用python call
run_exp
命令時出現問題。 使用call
我看到輸出“ run_exp完成!” 但絕對不要“ exp完成!”。 如果我刪除run_task
操作(以及相關的代碼,其在運行run_exp
)從run_exp
,該call
預期命令運行完成。 這使我相信,當被call
的腳本在后台運行進程時,使用call
存在問題。
任何人都可以闡明為什么會發生這種情況。 謝謝!
后台腳本的輸出仍將與子腳本進入相同的文件描述符。 這就是為什么父腳本仍在等待其完成的原因。
如果要妖魔它們,則應關閉后台腳本中的所有文件描述符:
(run_task auto_output >/dev/null 2>&1) &
(括號在一個有時我需要的子shell中執行。)
它還可以幫助在子腳本的末尾明確wait
后台進程:
run_task auto_output 2>/dev/null & backgroundPid=$!
...
echo "run_exp finished!"
wait "$backgroundPid"
如果兩者都單獨失敗,也許還應該嘗試將兩種策略結合起來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.