Linux中有一些命令带有“ fancy”输出-通过“ fancy”,我的意思是它是彩色的并且是实时的,即它覆盖本身,最好的例子是输出top
命令another example could be docker build
(在构建过程中以交互方式刷新时间(在下面的示例中为0.5s
,请参见演示):
[+] Building 0.5s (3/3) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 518B 0.0s
=> ERROR resolve image config for ... 0.5s
...
我的问题是,在Python中运行一个进程(大概使用subprocess.Popen
时,如何获得相同的输出?我主要对Linux感兴趣。
PS 我能获得的最接近的结果是通过分配tty获得的彩色输出:
out_r, out_w = pty.openpty()
p = subprocess.Popen(command, stdout=out_w, stderr=subprocess.STDOUT, shell=True)
os.close(out_w)
while True:
try:
output = os.read(out_r, 1000).decode()
print(output)
但是,毫不奇怪,它会打印下方的所有内容,而无需重写内容。
答案 0 :(得分:0)
好吧,对Google来说,正确的词是 ncurses / curses (ncurses / curses ),这立即使我想到了this answer。
以下几行对我来说就像是魅力:
import pexpect
child = pexpect.spawn(<command_line_str>)
child.interact()