0

我正在尝试在通过命令连接的某些机器上运行一些命令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这里失败并停止执行脚本。

4

1 回答 1

0

还捕获标准错误,可用于检查远程机器上的命令是否失败。

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.")
于 2018-09-25T17:51:33.113 回答