通过子进程通过 SSH 发出命令时正确获取 return 代码
Correctly getting return code when issuing command over SSH via subprocess
我正在尝试通过 ssh 发出命令并通过子进程获取其 return 代码。我有一些代码如下所示:
cmd = 'ssh user@ip_addr "some_command"'
res = subprocess.check_output(
cmd,
shell=True,
stdout=subprocess.PIPE)
如果 cmd 仅生成退出代码(例如,将 cmd 设置为 "exit 1",然后执行 try/catch 以查看它是否以非零退出,则此方法效果很好。但是,以下无限期挂起:
cmd = 'ssh user@ip_addr "ls -la && exit 0;"'
res = subprocess.check_output(
cmd,
shell=True,
stdout=subprocess.PIPE)
我看到了 two questions that looked similar, and I did RTFM,但我仍然不确定该怎么做。我真的不在乎命令是否生成输出;我更关心退出代码。如果有人知道这样做的最佳方法是什么,或者我是否不恰当地使用了子流程,我将不胜感激。
删除 stdout=subprocess.PIPE
,它应该可以工作; check_output
本身捕获输出,因此使用 stdout=subprocess.PIPE
重定向它会导致问题。如果您根本不关心输出,只需使用 subprocess.check_call
(同样,不要使用 stdout=subprocess.PIPE
)。
请勿使用 std{out,err}=PIPE
,除非您从管道中阅读!!!
要获取 return 代码,同时 丢弃 使用 subprocess
模块通过 ssh 发出的命令的输出:
from subprocess import call, DEVNULL, STDOUT
returncode = call(['ssh', 'user@ip', 'ls -la && exit 0;'],
stdin=DEVNULL, stdout=DEVNULL, stderr=STDOUT)
另见,How to hide output of subprocess in Python 2.7。
注:shell=True
未使用。
我正在尝试通过 ssh 发出命令并通过子进程获取其 return 代码。我有一些代码如下所示:
cmd = 'ssh user@ip_addr "some_command"'
res = subprocess.check_output(
cmd,
shell=True,
stdout=subprocess.PIPE)
如果 cmd 仅生成退出代码(例如,将 cmd 设置为 "exit 1",然后执行 try/catch 以查看它是否以非零退出,则此方法效果很好。但是,以下无限期挂起:
cmd = 'ssh user@ip_addr "ls -la && exit 0;"'
res = subprocess.check_output(
cmd,
shell=True,
stdout=subprocess.PIPE)
我看到了 two questions that looked similar, and I did RTFM,但我仍然不确定该怎么做。我真的不在乎命令是否生成输出;我更关心退出代码。如果有人知道这样做的最佳方法是什么,或者我是否不恰当地使用了子流程,我将不胜感激。
删除 stdout=subprocess.PIPE
,它应该可以工作; check_output
本身捕获输出,因此使用 stdout=subprocess.PIPE
重定向它会导致问题。如果您根本不关心输出,只需使用 subprocess.check_call
(同样,不要使用 stdout=subprocess.PIPE
)。
请勿使用 std{out,err}=PIPE
,除非您从管道中阅读!!!
要获取 return 代码,同时 丢弃 使用 subprocess
模块通过 ssh 发出的命令的输出:
from subprocess import call, DEVNULL, STDOUT
returncode = call(['ssh', 'user@ip', 'ls -la && exit 0;'],
stdin=DEVNULL, stdout=DEVNULL, stderr=STDOUT)
另见,How to hide output of subprocess in Python 2.7。
注:shell=True
未使用。