我正在尝试为我正在运行的小型AngularJS应用程序创建一个简单的多线程命令提示符。
在这个提示中,我想输入一个命令而不会被输出分解,如下所示:
Output
More output HTTP 1.0
HTTP Request from 127.0.0.1 for /img/foo.png - 200
> Humble command I'm ty-OH NO BUT MORE OUTPUT
SUCH ANNOYING OUTPUT FOR FAVICON.ICO - 404
-ping.. Dang it.
相反,我想这样:
Output
More output HTTP 1.0
HTTP Request from 127.0.0.1 for /img/foo.png - 200
OH NO BUT MORE OUTput and it's not breaking up what
you're typing... :/ - favicon.ico 404 btw...
> Humble command I'm typing that's not broken up
我不确定它是否可以在命令提示符下使用,如果需要,我可能只是导入pygame或者在需要时查看pyglet,但我相信命令提示符会更好为了我的目的。
我希望我为您解释,但如果您需要更多信息,请在下面询问!
使用Python 3.x
这就是它的样子
编辑:我添加了cmd.Cmd作为我的命令提示符,并按照J. F. Sebastian的要求做了,但它的行为......奇怪......
答案 0 :(得分:2)
听起来你想将python脚本作为后台进程运行:
>python yourScript.py &
>now it won't interrupt you but you'll have to pipe output to a file if you want to read it
&
就是这样。
如果你想在Python 的后台中运行没有输出的脚本,我会考虑使用threading。
答案 1 :(得分:1)
为了避免其他线程的输出中断输入,请组织脚本以仅在主线程中执行标准I / O,例如,将sys.stdout
,sys.stderr
替换为队列写入的文件类对象,在您完成输入后消耗队列:
import sys
from queue import Queue, Empty
class QueuedFile:
def __init__(self, queue):
self.queue = queue
def write(self, text):
self.queue.put(text)
def flush(self):
pass # noop
q = Queue()
sys.stdout = sys.stderr = QueuedFile(q)
# print from multiple threads while accepting input...
# print queued output
while True:
try:
sys.__stdout__.write(q.get(block=False))
except Empty:
break # no more output