我试图在通过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
在这里失败并停止执行脚本。
答案 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.")