Question

am en utilisant ssh pexpect d'écrire un script pour la compilation, l'apparence d'automatisation ssh comme celui-ci,

enter code here
child = ssh_expect('root', server2, cmd)
child.expect(pexpect.EOF)
print child.before

où cmd est la suivante:

cmd = "./configure CFLAGS=\"-g -O0 -DDEBUG\""

le problème se produit est qu'il dit,

configure: error: unrecognized option: -O0

considérant que, exécutez la même commande en utilisant commands.getoutput il exécute correctement.

Question quel est le problème que ce genre d'erreur est généré et obtenir comment puis-je celui éradiquer les champs?

Merci d'avance:)

Était-ce utile?

La solution

La raison pour laquelle il travaille si vous faites commands.getoutput est que toutes les commandes là-bas sont exécutés si une coquille, qui analysera votre commandline et comprendre que ce qui est entre les guillemets doubles après CFLAGS fait partie du même paramètre.

Lorsque vous utilisez cmds par pexpect, sans coquille est impliqué. En outre, il n'y a pas de coquille impliquée de l'autre côté de la connexion ssh lorsque vous fournissez des commandes sur la ligne de commande ssh, donc il n'y a rien qui parse CFLAGS en un seul paramètre. Par conséquent, au lieu du script configure obtenir un paramètre (CFLAGS = \ "- g -O0 -DDEBUG \"), il obtient trois paramètres ( 'CFLAGS = -g', '-O0', '-DDEBUG')

Si possible, évitez d'envoyer des commandes où les paramètres sont séparés par des espaces. Il semble pexpect peut prendre une liste d'arguments à la place. Exemple de code de travail:

#/usr/bin/env python

import pexpect

def ssh_expect(user, hostname, cmd):
    child = pexpect.spawn("ssh", ["%s@%s" % (user, hostname)] + cmd, timeout=3600)

    return child

child = ssh_expect("root", "server.example.com", ["./configure", "CFLAGS=\"-g -O0 -DDEBUG\""])
child.expect(pexpect.EOF)
print child.before
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top