如何将控件从我的python脚本返回到调用bash脚本?

时间:2011-10-03 13:34:35

标签: 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 个答案:

答案 0 :(得分:1)

除非您首先在本地do中完成set -e以使其对命令失败敏感,否则远程Python脚本所做的任何内容都不应该终止您的bash循环 - 在在这种情况下,只有当@EOL说,你的远程脚本遇到异常并将非零/错误值返回到SSH时才会死,然后在本地以非零/错误代码消失。

如果将do srv替换为do echo srv会发生什么情况,以便您只打印出您认为正在运行的命令?您是否看到打印出几个srv命令行,并且它们是否具有您期望的参数?

哦:而且,为什么你使用open为每一次命令运行分配一个新的Linux虚拟终端?你不会用这种方式耗尽虚拟终端吗?

答案 1 :(得分:0)

看起来quit()是使程序停止的功能。

如果您可以移除对quit()的呼叫(即,如果它什么都不做),请将其删除。

否则,您可以手动(而不是从shell脚本)运行Python程序,看看会发生什么:您的Python脚本可能会生成异常,这会使shell脚本停止。通过使用真实的参数(在远程计算机上)手动运行Python程序,您应该能够发现问题。

答案 2 :(得分:-1)

你应该可以简单地从主要功能返回。