Python 3.7.4. Я запускаю сценарий bash, используя Paramiko:
channel = ssh.get_transport().open_session()
channel.get_pty()
channel.invoke_shell()
time.sleep(1)
if channel.recv_ready():
output = channel.recv(1024).decode('ascii')
print(output)
cd = 'cd test/'
install = './test.sh'
channel.send(cd + '\n')
channel.send(install + '\n')
while True:
time.sleep(1)
if channel.recv_ready():
output = channel.recv(2048).decode('ascii')
if (r'User \x1b[1mtest\x1b[m\x0f does not exist, creating test user..' in output):
print('Test script started successfully')
break
else:
time.sleep(1)
if not(channel.recv_ready()):
break
Часть выходного значения в то время как l oop:
'cd test/\r\n[root@hostname test]# ./test.sh\r\nUser \x1b[1mtest\x1b[m\x0f does not exist, creating test user..\r\nuseradd: warning: the home directory already exists.\r\n(...)'
Я не могу понять почему (r'User \x1b[1mtest\x1b[m\x0f does not exist, creating test user..' in output)
не соответствует действительности. Я попытался декодировать вывод в UTF-8, используя обычную строку с escape-последовательностью backsla sh, но это тоже не сработало.
У меня была такая же проблема в других частях кода с разными строками, чтобы заставить его работать Я сократил их, чтобы удалить все косые черты. Но было бы хорошо узнать, что я делаю не так.