2010-06-15 59 views
0

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

谢谢, 马特

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) 
+0

那么,这很大程度上取决于远程命令的外观。也许它需要交互式运行(即可能会检查用户的终端)。给我们更多关于该命令的信息。 – rbp 2010-06-17 19:51:32

回答

1

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