gpt4 book ai didi

python - SSHClient.exec_command() 报告 "command not found"

转载 作者:行者123 更新时间:2023-12-01 02:40:13 26 4
gpt4 key购买 nike

我编写了一个脚本来帮助其他人在我们工作的存储系统上运行简单的日常命令。该脚本可以很好地处理返回简短输出的命令(例如 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

该命令返回存储系统上所有磁盘池的存储空间。

更新:

stderr.read()指出该命令无法识别 ( bash: mmdf: command not found ),尽管该命令在通过 SSH 连接到存储 Controller 时有效。

最佳答案

根据您的最新评论,您应该在运行命令时使用 mmdf 的绝对路径:

client.exec_command("/the/path/to/mmdf mmfs1 --block-size auto")

要找出 mmdf 的位置,请手动登录服务器并运行:

which mmdf
# or
type -P mmdf

关于python - SSHClient.exec_command() 报告 "command not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45793634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com