我写了一个脚本来帮助其他人在我们工作的存储系统上运行简单的日常命令。该脚本适用于返回简短输出的命令,例如 ls,但是,当脚本想要运行具有大输出的命令时,不会返回输出。它几乎好像超时了,但根本没有反馈,例如我认为可能有一部分命令输出。我已经围绕这个做了一些研究,并发现了其他有同样问题的人。他们得到的答案是使用:
stdin, stdout, stderr = client.exec_command(command)
我已经在我的代码中使用了它。我想知道这是否与缓冲区大小有关,令人讨厌的是我不知道如何在我的代码中实现它。我尝试使用以下方法添加时间延迟:
time.sleep(10)
但没有快乐。我也试过使用:
print stdout.channel.recv_exit_status()
但是,我得到了 127 的回报,所以我认为我在那里偏离了目标!我的代码是:
def ssh_command(ip, user, passwd, command):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username=user, password=passwd)
stdin, stdout, stderr = client.exec_command(command)
print stdout.read()
print stderr.read()
return
if __name__ == '__main__':
ssh_command(ip, user, passwd, command)
我省略了前几个代码块,其中一些变量由用户的原始输入定义。它很长,所以我认为最好省略,但很自然,如果需要,我可以发布它。
对于那些对我尝试运行的命令感兴趣的人,这是他们的 GPFS(Spectrum Scale)存储系统独有的 IBM 命令。命令是:
mmdf mmfs1 --block-size auto
该命令返回存储系统上所有磁盘池的存储空间。
尽管在 SSH 连接到存储控制器时stderr.read()
该命令bash: mmdf: command not found
工作正常,但该命令无法识别 ( )的状态。
根据您的最新评论,您应该mmdf
在运行命令时使用绝对路径:
client.exec_command("/the/path/to/mmdf mmfs1 --block-size auto")
要找出在哪里mmdf
,请手动登录到服务器并运行:
which mmdf
# or
type -P mmdf
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句