Skip to main content
 首页 » 编程设计

python之subprocess ssh 命令对某些命令失败但对其他命令失败(命令在终端中运行)

2025年05月04日9JustinYoung

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

ssh User@999 screen 列表

如果我直接在终端中执行上面的命令,我会得到我需要的结果。但是,当通过 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 

请您参考如下方法:

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

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

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