Python pxssh разделение строки отправки и отправка двух строк

Это мой первый вопрос, и я далек от профессионального программиста, но я занимался исследованиями и не обнаружил схожей проблемы с этим... Я указал в заголовке, что pxssh realted, но на самом деле относится ко многим другие дела кажутся. Проблема возникает, когда я пытаюсь отформатировать строку, чтобы отправить строку через pxssh, если я пытаюсь добавить фрагменты к строке, чтобы сделать полную строку, вместо добавления их в правильном порядке, меняется порядок и фрагмент las появляется в начале строки. Я покажу вид строки, которую я пытаюсь отформатировать, потому что я думаю, что это связано с символом / "

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

Мой код выглядит примерно так, что я перефразировал для воспроизведения ошибки, любопытно, как происходит неправильное форматирование строки, когда я использую в качестве входных данных вывод из функции, которая получает имя хоста, возможно, некоторые символы scape, которые я не вижу, или некоторые магия такого рода?

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

Заранее спасибо!

1 ответ

Решение

SIDENOTE1: В вашем коде много лишних скобок, которые я не собираюсь воспроизводить в ответе. Вам не нужно заключать объект в скобки для вызова его методов /

SIDENOTE2: Не рекомендуется использовать имена переменных CapWords. Только имена классов и имена переменных типов должны использовать этот стиль именования.


Вы должны удалить как новую строку, так и возврат каретки из pyexpect ответ.

Следующие должны сделать это:

computername = s.before.decode('utf-8').split('\r\n')[1]
Другие вопросы по тегам