如何从我的Python脚本返回控制权给调用的bash脚本?
我正在使用一个bash脚本来循环读取一个配置文件,然后根据这个文件通过ssh调用一个python脚本。不幸的是,一旦这个Python脚本完成工作并且我调用了quit
,bash脚本也会被关闭,这样就导致调用的bash脚本的循环提前结束了。
这是我的Bash脚本
target | grep 'srv:' | while read l ; do srv $l $SSH ; done
srv () {
SSH=$2
SRV=`echo $1 | awk -F: '{print $2}'`
STATUS=`echo $1 | awk -F: '{print $3}'`
open $SSH "srv" $SRV $STATUS
}
然后在远程机器上调用python脚本的地方
if __name__== "main":
redirect('./Server.log', 'false')
conn()
if sys.argv[1] == "srv":
ServerState(sys.argv[2], sys.argv[3])
quit()
所以看起来quit()也在中断这个脚本。
3 个回答
-1
你只需要在主函数中简单地返回就可以了。
0
看起来 quit()
是让你的程序停止运行的那个函数。
如果你能把 quit()
这一行去掉(也就是说它没有什么作用),那就直接去掉它吧。
否则,你可以手动运行你的 Python 程序(不要通过脚本运行),看看会发生什么:很可能是你的 Python 脚本出现了错误,这导致了脚本停止。通过在远程机器上用真实的参数手动运行你的 Python 程序,你应该能找到问题所在。
1
远程的Python脚本做的任何事情都不应该影响你的do
循环,除非你在本地的bash
中先执行了set -e
,这样它就会对命令失败变得敏感。也就是说,只有在你的远程脚本出现异常并返回一个非零的错误值给SSH时,do
循环才会停止,这样本地也会出现一个非零的错误代码。
如果你把do srv
换成do echo srv
,这样你就只是打印出你认为正在运行的命令。你会看到几个srv
命令行被打印出来吗?它们的参数是你预期的那些吗?
哦,对了,为什么你每次运行命令都要用open
来分配一个新的Linux虚拟终端?这样不会导致虚拟终端用完吗?