python subprocess-使用rsh获取在不同计算机上运行的命令的退出状态

时间:2018-09-25 11:40:49

标签: python subprocess python-3.5 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仅返回其退出状态,而不返回其正在执行的命令。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

也可以捕获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.")