【问题标题】:not getting output from parmiko/ssh command没有从 paramiko/ssh 命令获得输出
【发布时间】:2010-06-24 00:11:30
【问题描述】:

我正在使用 paramiko/ssh/python 尝试在远程服务器上运行命令。当我手动 ssh 并运行有问题的命令时,我得到了我想要的结果。但是如果我使用下面的python(从本网站的另一个线程中选择),则没有返回数据。如果我将命令修改为更基本的命令,例如“pwd”或“ls”,我就可以获得输出。任何帮助表示赞赏。

谢谢, 马特

import paramiko  
import time  
import sys, os, select  
import select  
hostname='10.15.27.166'  
hostport=22  
cmd='tail -f /x/web/mlog.txt' #works  
#cmd='customexe -args1 -args2' #doesn't work  
client = paramiko.SSHClient()  
client.load_system_host_keys()  
client.connect(hostname=hostname, username=username, password=password)  
transport = client.get_transport()  
channel = transport.open_session()  
channel.exec_command(cmd)  
while True:  
  rl, wl, xl = select.select([channel],[],[],0.0)  
  if len(rl) > 0:  
    # Must be stdout  
    print channel.recv(1024)  
  time.sleep(1)

【问题讨论】:

  • 嗯,这在很大程度上取决于远程命令的外观。也许它需要以交互方式运行(即,它可能会检查用户的终端)。向我们提供有关该命令的更多信息。

标签: python ssh paramiko


【解决方案1】:

我找到了解决方法,但不一定是根本原因:当 paramiko 创建 ssh 连接时,它没有在远程服务器的主目录中运行我的 bash_profile。因此,我将 bash_profile 中的命令复制到 cmd 变量中,从而加载了我认为会自动加载的各种环境变量。然后命令“customexe ...”按预期返回输出。

【讨论】: