作为 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()
