2017-02-06 3 views
1

Ceci est ma première question ici, et je suis loin du codeur professionnel, mais j'ai fait des recherches et n'ai pas trouvé de problème similaire à cela ... Je l'ai déclaré dans le titre qui est pxssh realted, mais en fait s'applique à beaucoup de cas otehr semble. Le problème survient lorsque j'essaie de formater une chaîne pour envoyer une ligne via pxssh, si j'essaie d'ajouter des fragments à la chaîne pour faire la ligne complète, au lieu de les ajouter dans le bon ordre, l'ordre change et les fragment apparaît au début de la chaîne. Je vais montrer le genre de chaîne que je suis en train de mettre en forme, parce que je pense est liée au caractère/"Python pxssh sendline fendre la chaîne et envoyer deux lignes

sed -i -e" s /. SringInLineIWantReplace. /StringIWantToPutInstead+StringFromFunctionInput1+.StringFromFunctionInput2/ » FileIWantToEdit

Mon code ressemble à ceci je reformulé pour reproduire l'erreur, il est curieux de voir comment se produit que pour formater correctement la ligne lors de l'utilisation en entrée la sortie de la fonction qui obtenir le hostname, peut-être certains personnages scape que je ne vois pas ou peu de magie de ce genre ?:

from pexpect import pxssh 
import getpass 

def login(hostname): 
    try: 
     s.login (hostname, username, password) 
    except (pxssh.ExceptionPxssh, e): 
     print ("pxssh failed on login.") 
     print (str(e)) 

def logout(): 
    s.logout() 

def MyFunction(StringFromFunctionInput1,StringFromFunctionInput2): 
    line=("sed -i -e {}{}.{}{}") 
    completeline=(line.format('"s/.*SringInLineIWantReplace.*/StringIWantToPutInstead',StringFromFunctionInput1,StringFromFunctionInput2,'/" FileIWantToEdit')) 
    return(completeline) 

def GetHostname(): 
    s.sendline ("hostname") 
    s.prompt() 
    ComputerName=(((s.before).decode("utf-8")).split("\n"))[1] 
    return(ComputerName) 

username = "youruser" 
password = "yourpass" 
address="192.168.9.100" 
print(address) 
s = pxssh.pxssh() 
login(address) 
input2=str(GetHostname()) 
print(MyFunction("Hi",input2)) 
logout() 
s.close() 

J'ai essayé de formater la chaîne sendline de plusieurs façons, mais il arrive toujours la même chose, quand je regarde dans le bash histoire de l'hôte cible, je vois comment pxssh a envoyé deux lignes J'espère que quelqu'un peut aider, je suis sûr qu'il est possible de l'obtenir résultat en utilisant un autre code, mais maintenant je suis juste curieux de savoir quel genre de magie est derrière cela: S

Merci d'avance!

Répondre

0

SIDENOTE1: Vous avez beaucoup de parenthèses supplémentaires dans votre code que je ne vais pas reproduire dans la réponse. Vous n'avez pas besoin d'entourer un objet avec des parenthèses pour appeler ses méthodes/

SIDENOTE2: Ce n'est pas une bonne pratique de capwords des noms de variables. Seuls les class names et type variable names doivent utiliser ce stype de nommage.


Vous devez enlever les deux la nouvelle ligne et le retour chariot de la réponse pyexpect.

Ce qui suit devrait le faire:

computername = s.before.decode('utf-8').split('\r\n')[1] 
+0

Simple et résolu! Merci beaucoup! Et merci pour les suggestions aussi! Je ne savais pas à propos de cette chose retour chariot, va regarder dans. – lopalcar