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

问题描述:

我正在使用bash脚本来遍历配置文件,并基于此,通过ssh调用python脚本。不幸的是,一旦Python脚本完成它的工作,我打电话quit bash脚本也会关闭,因此调用bash脚本的循环过早终止。如何从我的python脚本返回控件到调用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() 

上所以看起来像退出()也中断了脚本。

+0

你有没有尝试删除quit()语句,并让执行到达文件的结尾? –

+0

是否退出函数fire sys.exit(0)?如果Alex的解决方案无效,你也可以尝试。 –

+0

我刚刚尝试对quit()函数进行注释,以正常关闭与服务器的打开会话。 无论如何,它仍然以相同的方式表现。它可能是SSH会话吗? 'open(){ if [$ 1 =“true”];然后 \t ssh -l“$ SSHUSER”“$ SSHOST”“$ WSLT $ PYTH $ 2 $ 3 $ 4;” else \t $ WLST $ PYTH $ 2 $ 3 $ 4 fi }' – AleIla

你应该能够简单地从主函数返回。

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

如果您可以删除对quit()的呼叫(即,如果它什么都不做),只需将其删除即可。否则,你可以手工运行你的Python程序(而不是从shell脚本),看看会发生什么:你的Python脚本可能会生成一个异常,这会使shell脚本停止。通过在真实的参数(在远程机器上)手动运行Python程序,您应该能够发现问题。

没有远程Python脚本也应该能够杀死你do循环,除非你做在当地bash第一个set -e使它敏感命令失效 - 在这种情况下,将只有死,像@EOL说,你的远程脚本正在触发一个异常并返回一个非零/错误值给SSH,然后这个值会在本地死一个非零/错误代码。

如果您将do srv替换为do echo srv会发生什么情况,以便您打印出您认为正在运行的命令?你看到几个srv命令行被打印出来,他们是否有你期望的观点?

呵呵:为什么你使用open为命令的每一次运行分配一个新的Linux虚拟终端?你不用这种方式用完虚拟终端吗?