Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SSH未提供完整输出_Python_Ssh_Paramiko - Fatal编程技术网

Python SSH未提供完整输出

Python SSH未提供完整输出,python,ssh,paramiko,Python,Ssh,Paramiko,我试图编写一个脚本,登录到远程计算机,运行命令并返回输出。我在python中使用paramiko库来完成这项工作。然而,由于某种原因,没有生产出完整的产品,只有一行产品 为了解决这个问题,我创建了一个名为simple的本地脚本,它运行命令并将输出发送到文件remote_test_output.txt。然后我只是简单地将文件放在上面。该文件只包含同一行。每次输出的唯一一行都是相同的:命令的响应代码 当我手动完成这一切(ssh-over、登录和运行./simple)时,一切都正常工作,输出文件正确无

我试图编写一个脚本,登录到远程计算机,运行命令并返回输出。我在python中使用paramiko库来完成这项工作。然而,由于某种原因,没有生产出完整的产品,只有一行产品

为了解决这个问题,我创建了一个名为simple的本地脚本,它运行命令并将输出发送到文件remote_test_output.txt。然后我只是简单地将文件放在上面。该文件只包含同一行。每次输出的唯一一行都是相同的:命令的响应代码

当我手动完成这一切(ssh-over、登录和运行./simple)时,一切都正常工作,输出文件正确无误。但是,在我的机器上通过脚本执行,它只返回一行

我的代码:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(host, username, password)

ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('LD_LIBRARY_PATH=/opt/bin ./simple\n')

print "output:", ssh_stdout.read()+"end" #Reading output of the executed command
print "err:", ssh_stderr.read()#Reading the error stream of the executed command


sftp = ssh.open_sftp()
sftp.get('remote_test_output.txt', 'local_test_output.txt')
sftp.close()
返回的内容:

response code: 128
field1:value1
field2:value2
response code: 128
field3:value3
field4:value4
etc
应退还的内容:

response code: 128
field1:value1
field2:value2
response code: 128
field3:value3
field4:value4
etc
有人知道为什么我试图调用的命令不能正常输出吗


我必须包括LD_LIBRARY_PATH变量赋值,否则我会得到一个LIBRARY not exists错误。

根据paramiko的文档,“exec_command”方法会返回一个通道对象。第一个问题:您是否尝试将bufsize参数设置为1?通道对象“行为类似于套接字”。因此,文件中说:

这意味着recv()(可能还有read())将只读取读取缓冲区中的数据。因此,每当read()调用返回时,并不意味着该进程已经在远程执行。应使用exit_status_ready()方法检查命令是否已执行:


只有在这之后,你才能读取所有的数据。嗯,这就是我想的。我可能错了,但现在我无法测试我的理论。

根据paramiko的文档,“exec_command”方法返回通道对象。第一个问题:您是否尝试将bufsize参数设置为1?通道对象“行为类似于套接字”。因此,文件中说:

这意味着recv()(可能还有read())将只读取读取缓冲区中的数据。因此,每当read()调用返回时,并不意味着该进程已经在远程执行。应使用exit_status_ready()方法检查命令是否已执行:


只有在这之后,你才能读取所有的数据。嗯,这就是我想的。我可能错了,但现在我无法验证我的理论。

也许某个地方有不完全的重定向?您是否尝试过2>&1?./simple在做什么,./simple运行的基本命令是什么?@Dubslow这是一个get status命令。它获取另一台机器的状态、温度等。我知道重定向没有问题,因为如果我通过ssh连接并通过terminalPerhaps运行它,它会正常工作。是否有不完整的重定向?您是否尝试过2>&1?./simple在做什么,./simple运行的基本命令是什么?@Dubslow这是一个get status命令。它获取另一台机器的状态、温度等。我知道重定向没有问题,因为如果我通过ssh连接并通过终端运行它,重定向工作正常