当使用Python paramiko时,获取管道传输到另一个的退出状态

时间:2018-03-10 00:31:07

标签: python bash shell paramiko exit-code

我正在使用paramiko向远程主机发送SSH命令,并检查生成的错误代码。像这样:

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, port=port, username=user)
chan = client.get_transport().open_session()
chan.settimeout(timeout)
chan.set_combine_stderr(True)
chan.get_pty()
chan.exec_command(command)
status = int(chan.recv_exit_status())
if status:
    # got a non-0 exit status if I'm in here
    sys.exit(status)
client.close()

这很有效,因为我能够发送SSH命令并返回进程的错误代码。但是,如果我发送涉及管道的SSH命令,例如'echo“hello”|,该怎么办? tee mylog.log'?在这种情况下,退出状态作为上述代码中的“status”变量返回,将是tee的退出状态,而不是通过管道输入的流程。 (显然这个echo命令不会失败,但实际上我将运行一个shell脚本并输入到tee,这是我很好奇的shell脚本的退出状态)。

现在在bash脚本中我可以使用$ {PIPESTATUS [0]}。在paramiko有这样的吗?一种使用paramiko的方法,能够管道到三通,并找出管道命令的退出状态?

1 个答案:

答案 0 :(得分:0)

您可以在通过paramiko运行的bash脚本中使用Row customer agent value city ts next_customer next_value 1 1 1 106 LA 2019-02-12 15:05:00 UTC 1 251 。在这种情况下 ;将会发送适当的退出状态。

如果仅运行一条命令,也可以在该命令前加上set -eo pipefail

相关问题