簡體   English   中英

python:子進程調用一個腳本,該腳本運行一個掛起的后台進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM