繁体   English   中英

如何将控制权从python脚本返回给调用bash脚本?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM