python 子进程 - 使用 rsh 在不同机器上获取命令 运行 的退出状态

python subprocess - get exit status of command run on different machine using rsh

我正在尝试 运行 我通过 rsh 命令连接的某台机器上的一些命令(我的情况不能使用 ssh)。

通过 subprocess.check_call 函数,我正在执行命令并期望 check_call 在我的“cd /libs/”命令的退出状态指示失败时异常退出。

下面是我正在尝试的代码。

with open('logs.txt','w') as outstream:
    subprocess.check_call("rsh bldr 'cd /libs/' ", shell=True,stdout=outstream)

但是在这里,rsh 只是 returns 它的退出状态,而不是它正在执行的命令。

因为即使在命令失败的情况下,check_call 函数也没有错误,因为它正在获得 rsh 退出状态,这将始终为 0。

那么,这里如何获取命令的退出状态呢?

此外,如何根据我的命令退出状态使 check_call 失败?

注意:我正在尝试将目录更改为不存在的 /libs。我希望 check_call 在这里失败并停止执行脚本。

同时捕获 stderr,它可用于检查远程机器上的命令是否失败。

with open('logs.txt','w') as outstream:
    with open('error.txt','w') as errstream:
        ret = subprocess.check_call("rsh centos lsh", shell=True, stderr=errstream, stdout=outstream)

fpstat = os.stat('error.txt')
if fpstat.st_size > 0:
    print("problem in command on remote machine.")
else:
    print("Successful.")