Python pxssh sendline 字符串拆分发送两行

Python pxssh sendline string splitting and sending two lines

这是我的第一个问题,我远不是专业的编码员,但我一直在研究并没有发现任何类似的问题......我在标题中说的是pxssh realted,但是实际上似乎适用于许多其他情况。 当我尝试格式化字符串以便通过 pxssh 发送一行时出现问题,如果我尝试将片段附加到字符串以构成完整行,而不是按正确的顺序附加它们,则顺序会更改并且 las 片段出现在字符串的开头。我将展示我尝试格式化的字符串类型,因为我认为与字符 /"

有关

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

我的代码看起来像这样为了重现错误我改写了,奇怪的是当我使用获取主机名的函数的输出作为输入时,怎么会不正确地格式化行,也许是一些我不知道的转义字符没看到或类似的魔法吗?:

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()

我尝试以多种方式格式化 sendline 字符串,但总是发生相同的情况,当我查看目标主机的 bash 历史记录时,我看到 pxssh 如何发送两行。 希望有人能提供帮助,我确信使用其他代码可以获得相同的结果,但现在我只是好奇这背后是哪种魔法:S

提前致谢!

SIDENOTE1: 你的代码中有很多额外的括号,我不会在答案中重现。您不需要用圆括号括起一个对象来调用它的方法/

SIDENOTE2: CapWords 变量名不是好的做法。只有 class names and type variable names 应使用此命名类型。


您需要从 pyexpect 响应中去除换行符和回车符 return。

下面应该这样做:

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