2010-06-15 8 views
0

J'utilise paramiko/ssh/python pour tenter d'exécuter une commande sur un serveur distant. Quand je ssh manuellement et exécuter la commande en question, j'obtiens les résultats que je veux. Mais si j'utilise le python (co-opté d'un autre thread sur ce site) ci-dessous, il n'y a pas de données retournées. Si je modifie la commande pour qu'elle soit quelque chose de plus basique comme 'pwd' ou 'ls', je peux alors obtenir la sortie. Toute aide est appréciée.ne pas obtenir la sortie de la commande parmiko/ssh

Merci, Matt

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

Eh bien, cela dépend fortement de ce à quoi ressemble la commande à distance. Peut-être doit-il être exécuté de manière interactive (c'est-à-dire qu'il vérifie peut-être le terminal de l'utilisateur). Donnez-nous plus d'informations sur cette commande. – rbp

Répondre

1

J'ai trouvé une solution, mais pas nécessairement la cause racine: Lorsque paramiko a créé la connexion ssh, il n'a pas couru mon bash_profile dans mon répertoire personnel sur le serveur distant. J'ai donc copié les commandes du fichier bash_profile dans la variable cmd et ainsi chargé diverses variables d'environnement que je pensais avoir chargées automatiquement. Puis la commande "customexe ..." a renvoyé la sortie comme prévu.

Questions connexes