[英]How do I go from a bash script that calls a python script to a python script calling a bash script?
[英]How can I return control from my python script to the calling bash script?
我正在使用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()也在中断脚本。
除非您先在本地bash
中执行set -e
使其对命令失败敏感,否则远程Python脚本确实不会杀死do
循环,在这种情况下,只有@EOL说,您的远程脚本遇到异常,并向SSH返回一个非零/错误值,它将在本地死于非零/错误代码。
如果将do srv
替换为do echo srv
以便仅获得您认为正在运行的命令的打印输出,会发生什么情况? 您是否看到几个srv
命令行被打印出来,并且它们具有您期望的参数?
哦:而且,为什么要使用open
为命令的每次运行分配一个新的Linux虚拟终端? 您不会用完虚拟终端吗?
看起来quit()
是使程序停止的函数。
如果您可以删除对quit()
的调用(即,如果它什么也不做),则将其删除。
否则,您可以手动运行Python程序(而不是从Shell脚本运行)并查看会发生什么:您的Python脚本很可能会生成异常,这会使Shell脚本停止。 通过在实际参数上(在远程计算机上)手动运行Python程序,您应该能够发现问题。
您应该能够简单地从main函数返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.