簡體   English   中英

從調用python腳本的bash腳本返回

[英]Returning from bash script that invokes a python script

我有一個bash腳本( Controller.sh ),它可以調用python腳本( MyDaemon.py )。 后者帶有一個參數和一個命令,可以像下面這樣從命令行調用:

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue start

要么

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue stop

要么

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue status

我試圖讓Controller.sh調用MyDaemon.py ,然后退出並顯示一個狀態。 應該啟動python腳本,並且Controller.sh應該返回。 這是我的Controller.sh代碼:

COLOR=$1
COMMAND=$2

DIRNAME=`dirname $0`
RESULT="/tmp/$COLOR.$COMMAND.result"

# remove any old console output
rm -f $RESULT 2>/dev/null

#start with CPU affinity for anything other than CPU 0.
sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p $COLOR $COMMMAND</dev/null >$RESULT 2>&1

STATUS=$?

# print output
cat $RESULT

# check on success
if [ $STATUS -ne 0 ]
then
        echo "ERROR: $COLOR $COMMAND failed"
        exit 1
fi

現在,如果在命令行中我以Controller.sh blue start調用Controller.sh blue start它將啟動python腳本,但是Controller.sh不會返回狀態。 另一方面,如果我運行以下命令,它將返回:

[nford@myserver]# sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p blue start</dev/null >/tmp/blah.log 2>&1
Started with pid 1326
[nford@myserver]#

我不得不得出一個結論,那就是bash腳本中存在某些阻止其返回的信息。

應該注意的是, MyDaemon.py會分叉進程,這就是為什么我需要重定向輸出。 還應該注意的是,我將大部分內容從另一個與php腳本執行類似操作的腳本中刪除。 一些我不太理解的含義(例如STATUS=$? )。 也就是說,即使我在sudo taskset調用行之后刪除了所有內容,它仍然無法干凈地返回。 如何獲取bash腳本以正確執行此命令?

腳本后:我對這個問題“太過具體”並被否決/否決感到困惑。 試圖使自己清晰 我試圖了解在分支上下文腳本與bash腳本上下文中運行方式的差異。 我在上面提供了一個具體示例,但這是一個一般概念。

更新:當我使用bash -x運行腳本時,此結果進一步表明它死於sudo taskset行。 它沒有start命令的事實令人困惑。

[nford@myserver]# bash -x Controller.sh Blue start
+ COLOR=Blue
+ COMMAND=start
++ dirname Controller.sh
+ DIRNAME=.
+ RESULT=/tmp/Blue.start.result
+ rm -f /tmp/Blue.start.result
+ sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p Blue

更新: bash -x揭示了問題: start命令未通過:變量名稱中的錯字產生為無聲bash錯誤。 要點:使用bash -x進行調試!

由於您的錯字-您應該在腳本的頂部使用set -u ,這可以節省生命,並且可以避免不眠之夜以及對頭發的拉扯。

set -u會給你...

myscript.sh: line 11: COMMMAND: unbound variable

記住,您可以像使用-x一樣運行類似bash -u myscript.sh arg1 arg2類的腳本,它們都有助於跟蹤腳本問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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