首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命令行应用程序中打印标准输出,而不覆盖挂起的用户输入

在命令行应用程序中打印标准输出,而不覆盖挂起的用户输入
EN

Stack Overflow用户
提问于 2010-03-14 07:01:46
回答 2查看 436关注 0票数 1

在一个基本的Unix-shell应用程序中,如何在不干扰任何未决用户输入的情况下打印到stdout。

例如,下面是一个响应用户输入的简单Python应用程序。在后台运行的线程每隔1秒打印一个计数器。

代码语言:javascript
复制
import threading, time

class MyThread( threading.Thread ):
    running = False
    def run(self):
        self.running = True
        i = 0
        while self.running:
            i += 1
            time.sleep(1)
            print i

t = MyThread()
t.daemon = True
t.start()
try:
    while 1:
        inp = raw_input('command> ')
        print inp
finally:
    t.running = False

注意线程如何在用户输入时破坏显示的用户输入(例如hell1o wo2rld3)。您将如何解决这一问题,以便shell在保留用户当前键入的行的同时写入新行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-14 07:44:18

您必须将您的代码移植到某种比电传打字稍好的方式来控制终端--例如,使用Python标准库中的curses模块,或者通过其他方式在输出之前将光标移开,然后将其移回用户忙于输入内容的位置。

票数 2
EN

Stack Overflow用户

发布于 2010-03-14 15:38:22

你可以推迟写输出,直到你收到一些输入。对于任何更高级的问题,你必须使用Alex的答案

代码语言:javascript
复制
import threading, time
output=[]
class MyThread( threading.Thread ):
    running = False
    def run(self):
        self.running = True
        i = 0
        while self.running:
            i += 1
            time.sleep(1)
            output.append(str(i))

t = MyThread()
t.daemon = True
t.start()
try:
    while 1:
        inp = raw_input('command> ')
        while output:
            print output.pop(0)
finally:
    t.running = False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2440387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档