如何在python3中将字节控制台转换为字符串?

如何在python3中将字节控制台转换为字符串?,python,unicode,terminal,ascii,pty,Python,Unicode,Terminal,Ascii,Pty,我有保存ssh会话中所有数据的python脚本 import os import pty out = open('output.txt', 'w') def read(fd): data = os.read(fd, 1024) out.write(data.decode('utf-8', 'ignore')) return data pty.spawn('./script.sh', read) out.close() #!/usr/bin/env bash s

我有保存ssh会话中所有数据的python脚本

import os
import pty

out = open('output.txt', 'w')


def read(fd):
    data = os.read(fd, 1024)
    out.write(data.decode('utf-8', 'ignore'))
    return data


pty.spawn('./script.sh', read)
out.close()
#!/usr/bin/env bash sshroot@admin 我想在output.txt中获得类似的内容 root@admin:~#顶部 top-15:15:01最多21天,5:00,1个用户,平均负载:0.00,0.00,0.00 任务:共185项,1项运行,184项睡眠,0项停止,0项僵尸 %Cpu:0.1us、0.0sy、0.0ni、99.9id、0.0wa、0.0hi、0.0si、0.0st KiB内存:总计2047952,可用170368,使用327540,缓冲/缓存1550044 KiB交换:总计0,免费0,已使用0。1373184可用内存 PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令 1根20 0 185396 6044 4020 S 0.0 0.3 0:23.03系统D 2根20 0 0 0 0 S 0.0 0 0.0 0:00.06 kthread 3根20 0 0 0 S 0.0 0 0.0 0:00.98 ksoftirqd/0 5根0-20 0 0 S 0.0 0 0.0 0:00.00 kworker/0:+ 7根20 0 0 0 S 0.0 0.0 3:41.59 rcu_sched 8根20 0 0 0 S 0.0 0 0.0 0:00.00 rcu_bh 9根rt 0 0 0 S 0.0 0.0 0:01.01迁移/0 10根rt 0 0 S 0.0 0.0:06.50看门狗/0 11根rt 0 0 S 0.0 0.0 0:06.96看门狗/1 12根rt 0 0 S 0.0 0.0 0:00.86迁移/1 13根20 0 0 0 S 0.0 0 0:02.11 ksoftirqd/1 15根0-20 0 0 0 S 0.0 0 0:00.00 kworker/1:+ 17根20 0 0 0 0 S 0.0 0 0:00.00 kdevtmpfs 18根0-20 0 0 0 S 0.0 0 0.0 0:00.00网络 19根0-20 0 0 S 0.0 0.0 0:00.00性能 20根20 0 0 0 0 S 0.0 0 0.0 0:00.00 khungtaskd 21根0-20 0 0 0 S 0.0 0 0.0 0:00.00写回 root@admin:~#退出 但我明白了 ]0;root@admin: ~root@admin:~#ex[K[Ktop [1h=[25l[H[2J(B[mtop-15:15:01最多21天,5:00,1个用户,平均负载:0.00,0.00(B[m[39;49m(B[m[39;49m[K 任务:(B[m[39;49m[1m 185)(B[m[39;49m总数,(B[m[39;49m[1m 1)(B[m[39;49m运行,(B[m[39;49m[1m 184)(B[m[39;49m睡眠,(B[m[39;49m[1M0)(B[m[39;49m[39;49m] %(B[m[39;m[39;m[39;m[39;m[39;m[39;m[39;m[39;m[39;49m[39;49m[1m[1m 0.0(B[m[39;m[39;m[39;m[39;49m[39;49m[39;49m[39m[39;49m[39;49m[39;m[39;m[39;m[39;49m[39;49m[39;49m[39;49m[1米米[1米[1米[1米[1m 0.0.0.0.0 0 0 0 0.0 0 0.0 0 0 0 0 0 0 0 0 0.0 0 0 0 0.0 0 0 0 0 0.0)0 0 0 0 0 0 0.0.0)0 0 0 0 0 0 0 0.0.0(B[0.0.0[0)0 0 0)0 0 0 0)0 0 0 0 0 0 0)0(B[m[39;49m(B[m[39;49m[K KiB成员:(B[m[39;49m[1m 2047952)(B[m[39;49m总数,(B[m[39;49m[1m 170368)(B[m[39;49m自由,(B[m[39;49m[1m 327540)(B[m[39;49m[39;49m]1m 1550044)(B[m[39;49mbuff/cache)(B[m[39;49m[39;49m] KiB掉期:(B[m[39;49m[100万)(B[m[39;49m]总计,(B[m[39;49m[100万)(B[m[39;49m]自由,(B[m[39;49m[100万)(B[m[39;49m[1373184)(B[m[39;49m] [K] [7m PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令(B[m[39;49m[K (B[m 1根20 0 185396 6044 4020 S 0.0 0.3 0:23.03系统D(B[m[39;49m[K (B[m 2根20 0 0 0 0 S 0.0 0 0:00.06 K线程 (B[m3根20 0 0 0 0 0 0 0 0:00.98 ksoftirqd/0(B[m[39;49m[K (B[m 5根0-20 0 0 0 S 0.0 0 0:00.00 kworker/0:+(B[m[39;49m[K (B[m 7根20 0 0 0 S 0.0 0 0 3:41.59 rcu_sched(B[m[39;49m[K (B[m 8根20 0 0 0 S 0.0 0 0:00.00 rcu_bh(B[m[39;49m[K (B[m 9根rt 0 0 0 S 0.0 0 0:01.01迁移/0(B[m[39;49m[K (B[m 10根rt 0 0 0 S 0.0 0 0:06.50看门狗/0(B[m[39;49m[K (B[m 11根rt 0 0 0 S 0.0 0 0:06.96看门狗/1(B[m[39;49m[K (B[m 12根rt 0 0 0 0 0 0 0 0 0:00.86迁移/1(B[m[39;49m[K (B[m 13根20 0 0 0 S 0.0 0 0:02.11 ksoftirqd/1(B[m[39;49m[K (B[m 15根0-20 0 0 0 S 0.0 0 0:00.00 kworker/1:+(B[m[39;49m[K (B[m 17根20 0 0 0 S 0.0 0 0:00.00 kdevtmpfs(B[m[39;49m[K (B[m 18根0-20 0 0 0 0 S 0.0 0 0:00.00净 (B[m 19根0-20 0 0 0 S 0.0 0 0:00.00性能)(B[m[39;49 m[K (B[m 20根20 0 0 0 S 0.0 0 0:00.00 khungstaskd(B[m[39;49m[K (B[m 21根0-20 0 0 0 S 0.0 0 0:00.00写回 [?12l[?25h[K]0;root@admin: ~root@admin:~#退出
您看到的是ANSI转义序列。它们用于控制颜色和光标位置


在script.sh中使用“top-b”而不是“top”来删除所有特殊的显示字符。

您可以使用子进程并存储正在运行的shell脚本的输出。然后您可以将该文本输出到如下文件:

import subprocess
output = subprocess.Popen(['./script.sh'], stdout=subprocess.PIPE)
with open('outfile.txt', 'wb') as outfile:
    out, err = output.communicate()
    outfile.write(out.encode('utf-8'))
抱歉,#!/usr/bin/env bash sshroot@example root@admin:~# top top - 15:15:01 up 21 days, 5:00, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 185 total, 1 running, 184 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2047952 total, 170368 free, 327540 used, 1550044 buff/cache KiB Swap: 0 total, 0 free, 0 used. 1373184 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 185396 6044 4020 S 0.0 0.3 0:23.03 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.06 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.98 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+ 7 root 20 0 0 0 0 S 0.0 0.0 3:41.59 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:01.01 migration/0 10 root rt 0 0 0 0 S 0.0 0.0 0:06.50 watchdog/0 11 root rt 0 0 0 0 S 0.0 0.0 0:06.96 watchdog/1 12 root rt 0 0 0 0 S 0.0 0.0 0:00.86 migration/1 13 root 20 0 0 0 0 S 0.0 0.0 0:02.11 ksoftirqd/1 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:+ 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf 20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd 21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback root@admin:~# exit ]0;root@admin: ~root@admin:~# ex[K[Ktop [?1h=[?25l[H[2J(B[mtop - 15:15:01 up 21 days, 5:00, 1 user, load average: 0.00, 0.00, 0.00(B[m[39;49m(B[m[39;49m[K Tasks:(B[m[39;49m[1m 185 (B[m[39;49mtotal,(B[m[39;49m[1m 1 (B[m[39;49mrunning,(B[m[39;49m[1m 184 (B[m[39;49msleeping,(B[m[39;49m[1m 0 (B[m[39;49mstopped,(B[m[39;49m[1m 0 (B[m[39;49mzombie(B[m[39;49m(B[m[39;49m[K %Cpu(s):(B[m[39;49m[1m 0.1 (B[m[39;49mus,(B[m[39;49m[1m 0.0 (B[m[39;49msy,(B[m[39;49m[1m 0.0 (B[m[39;49mni,(B[m[39;49m[1m 99.9 (B[m[39;49mid,(B[m[39;49m[1m 0.0 (B[m[39;49mwa,(B[m[39;49m[1m 0.0 (B[m[39;49mhi,(B[m[39;49m[1m 0.0 (B[m[39;49msi,(B[m[39;49m[1m 0.0 (B[m[39;49mst(B[m[39;49m(B[m[39;49m[K KiB Mem :(B[m[39;49m[1m 2047952 (B[m[39;49mtotal,(B[m[39;49m[1m 170368 (B[m[39;49mfree,(B[m[39;49m[1m 327540 (B[m[39;49mused,(B[m[39;49m[1m 1550044 (B[m[39;49mbuff/cache(B[m[39;49m(B[m[39;49m[K KiB Swap:(B[m[39;49m[1m 0 (B[m[39;49mtotal,(B[m[39;49m[1m 0 (B[m[39;49mfree,(B[m[39;49m[1m 0 (B[m[39;49mused.(B[m[39;49m[1m 1373184 (B[m[39;49mavail Mem (B[m[39;49m(B[m[39;49m[K [K [7m PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND (B[m[39;49m[K (B[m 1 root 20 0 185396 6044 4020 S 0.0 0.3 0:23.03 systemd (B[m[39;49m[K (B[m 2 root 20 0 0 0 0 S 0.0 0.0 0:00.06 kthreadd (B[m[39;49m[K (B[m 3 root 20 0 0 0 0 S 0.0 0.0 0:00.98 ksoftirqd/0 (B[m[39;49m[K (B[m 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+ (B[m[39;49m[K (B[m 7 root 20 0 0 0 0 S 0.0 0.0 3:41.59 rcu_sched (B[m[39;49m[K (B[m 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh (B[m[39;49m[K (B[m 9 root rt 0 0 0 0 S 0.0 0.0 0:01.01 migration/0 (B[m[39;49m[K (B[m 10 root rt 0 0 0 0 S 0.0 0.0 0:06.50 watchdog/0 (B[m[39;49m[K (B[m 11 root rt 0 0 0 0 S 0.0 0.0 0:06.96 watchdog/1 (B[m[39;49m[K (B[m 12 root rt 0 0 0 0 S 0.0 0.0 0:00.86 migration/1 (B[m[39;49m[K (B[m 13 root 20 0 0 0 0 S 0.0 0.0 0:02.11 ksoftirqd/1 (B[m[39;49m[K (B[m 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:+ (B[m[39;49m[K (B[m 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs (B[m[39;49m[K (B[m 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns (B[m[39;49m[K (B[m 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf (B[m[39;49m[K (B[m 20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd (B[m[39;49m[K (B[m 21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback (B[m[39;49m[K[?1l>[25;1H [?12l[?25h[K]0;root@admin: ~root@admin:~# exit
import subprocess
output = subprocess.Popen(['./script.sh'], stdout=subprocess.PIPE)
with open('outfile.txt', 'wb') as outfile:
    out, err = output.communicate()
    outfile.write(out.encode('utf-8'))