subprocess ssh命令对某些命令失败但对其他命令失败(命令在终端中有效)

时间:2013-12-10 15:33:24

标签: python ssh subprocess gnu-screen

作为python脚本的一部分,我希望捕获通过ssh执行的shell命令的输出,即

ssh User@999 screen -list

如果我直接在终端执行上述命令,我会得到我需要的结果。但是,当通过subprocess.check_output执行如下操作时,我收到non-zero exit status 1错误。

我可以通过ssh执行其他命令并捕获输出而没有问题 是否有一些特定的screen -list不喜欢以这种方式被调用?


import subprocess 

srvr = 'User@999.99.999.9'

print("CMD 1: ===============")
cmd1 = "ssh " + srvr + " ls -l"
print ("COMMAND IS .....  " + cmd1 + "\n")
out1 = subprocess.check_output(cmd1, shell=True)
print(out1 + "\n")

print("CMD 2: ===============")
cmd2 = "ssh " + srvr + " screen -list"
print ("COMMAND IS .....  " + cmd2 + "\n")
out2 = subprocess.check_output(cmd2, shell=True)
print(out2 + "\n")

错误:

subprocess.CalledProcessError: Command '['ssh User@999.99.999.9 screen', '-list']' returned non-zero exit status 1

2 个答案:

答案 0 :(得分:1)

subprocess.check_output检查子进程的退出代码;如果退出代码不为零,它会引发异常。

如果您不关心退出代码,请使用subprocess.Popen.communicate

out1, err1 = subprocess.Popen(cmd1,
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE).communicate()

答案 1 :(得分:0)

subprocess.check_output()应该如何运作。请参阅:http://docs.python.org/2/library/subprocess.html

服务器上的命令返回非零返回码,因此引发了相应的异常CalledProcessError