【问题标题】:Create new console for the same process为同一进程创建新控制台
【发布时间】:2015-01-01 21:00:59
【问题描述】:

我试图了解如何创建一个新的控制台来打印东西,也就是说,有多个标准输出可用。 在阅读了一些问题后,我只设法做到了:

from subprocess import Popen, CREATE_NEW_CONSOLE
handle = Popen("cmd", stdin=PIPE, creationflags=CREATE_NEW_CONSOLE)
i.write(b'hello')

但该消息不会显示在新控制台上。

我有什么选择?

【问题讨论】:

  • 您希望输出到哪里?您希望它与程序的输出交错,还是发送到文件或其他地方? .write() 方法是“其他地方”吗?我不清楚你希望看到什么。
  • @Kevin 我想在一个控制台上打印一些东西,在另一个控制台上打印其他东西。

标签: python


【解决方案1】:

虽然我没有找到如何从新控制台直接创建新的 sdtout,但我设法使用进程间通信管道获得了相同的效果。

new_console.py

​​>
from multiprocessing.connection import Client
import sys

address = '\\\\.\pipe\\new_console'
conn = Client(address)
while True:
    print(conn.recv())

console_factory.py

​​>
from multiprocessing.connection import Listener
from subprocess import Popen, CREATE_NEW_CONSOLE

address = '\\\\.\pipe\\new_console'
listener = Listener(address)

def new_console():
    Popen("python new_console.py", creationflags=CREATE_NEW_CONSOLE)
    return listener.accept()

c1 = new_console()
c1.send("console 1 ready")
c2 = new_console()
c2.send("console 2 ready")

进一步的改进包括在循环中使用 select 将输入从新控制台发送到主进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多