Символы управления процессом в выводе pexpect - PullRequest
0 голосов
/ 07 апреля 2020

Например, рассмотрим этот фрагмент текста:

 * Starting FTP server vsftpd       [80G /usr/sbin/vsftpd already running.

[74G[ OK ]
 * Starting RPC port mapper daemon rpcbind       [80G 
[74G[ OK ]
 * Starting OpenBSD Secure Shell server sshd       [80G 
[74G[ OK ]
]0;root@cc334d73f202: ~root@cc334d73f202:~# curl https://go.microsoft.com/fwlink/?LinkID=760868
]0;root@cc334d73f202: ~root@cc334d73f202:~# [K

Если вы сохраните это в файл, а затем выполните команду cat, вы получите:

 * Starting FTP server vsftpd                                                   /usr/sbin/vsftpd already running.
                                                                         [ OK ]
 * Starting RPC port mapper daemon rpcbind                               [ OK ] 
 * Starting OpenBSD Secure Shell server sshd                             [ OK ] 
root@cc334d73f202:~# curl https://go.microsoft.com/fwlink/?LinkID=760868
root@cc334d73f202:~#

Я хочу как-то преобразовать существующий текст в этот более читаемый формат. (Вывод с управляющими символами был получен из вывода pexpect). Я использую child.logfile_read = f для захвата вывода pexpect.

Я попытался удалить управляющие символы, но текст не так удобен для чтения, как если бы они были фактически обработаны.

Я также пытался cat file_name > new_file_name, но это ничего не меняет.

Я просмотрел документы pexpect, чтобы увидеть, есть ли какие-либо встроенные функции для этого, но я мог найти что-нибудь. Интересно, что я не видел проблемы с paramiko (вывод из paramiko всегда чистый).

Я также пытался выяснить, как bash обрабатывает текст и управляющие символы, но не смог придумать способ обработки файла с управляющими символами.

Есть ли способ обработки этих управляющих символов?

Редактировать: Мой код pexpect:

def change_password(user, ip, password, logfile):

    ssh = pexpect.spawn("ssh -p 21 " + user + "@" + ip)
    # ssh.logfile_read = sys.stdout
    ssh.logfile_read = logfile

    ssh.expect("assword:")
    ssh.sendline(old_password)
    ssh.expect("#")

    ssh.sendline("curl https://go.microsoft.com/fwlink/?LinkID=760868")
    ssh.expect("#")

...