Python:没有输入的打印行被分解

时间:2015-08-24 02:53:55

标签: python python-3.x command-line-interface

我正在尝试为我正在运行的小型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

Gist

What it looks like

这就是它的样子

编辑:我添加了cmd.Cmd作为我的命令提示符,并按照J. F. Sebastian的要求做了,但它的行为......奇怪......

2 个答案:

答案 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.stdoutsys.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