1

有没有办法打开第二个 python 控制台并让新控制台运行,而原始控制台继续运行,当新控制台完成时,它以变量的形式将其数据发送回原始控制台?

4

5 回答 5

2

也许您应该研究多处理或多线程模块。这些可以帮助您从原始(父)程序中生成子进程。

于 2013-05-28T20:03:14.927 回答
1

sub-process模块可能是您正在寻找的。但是,问题是,您会在整个程序完成后获得该过程的输出。这意味着,如果您尝试运行的程序永远运行,您将无法看到输出,直到它退出(通过强制它或使用终止方法)。

如何将输出分配给变量的示例如下:

output,error=your_process.communicate()

这的输出部分是您将使用的(基于您的问题)。但是,如果您运行它并且出现问题(不返回 0),则会出现错误。如果您不希望捕获错误,则可以简单地将其分配给_.

另请注意,如果您使用关键字参数,我建议使用该shlex库将您的字符串拆分为参数。(您可以只使用常规字符串,例如:var="mypythonprogram.py argument1 argument2"并使用arguments=shlex.split(var),然后您可以将其提供给子流程的参数。

如果您不需要与程序交互,另一种选择使用线程,关于它们的堆栈溢出有很多问题,以及官方和互联网上其他网站上的大量文档。

于 2012-07-23T23:40:14.643 回答
0

阅读Python 多处理。它具有在进程之间交换对象的示例。

于 2012-07-23T23:31:00.670 回答
0

听起来您想做类似于多处理库提供的东西。如果没有更多信息,我所能做的就是将您指向文档。

例如:

http://www.ibm.com/developerworks/aix/library/au-multiprocessing/http://docs.python.org/library/multiprocessing.html

于 2012-07-23T23:32:29.293 回答
0

如果您在 Windows 上,您可以使用 win32console 模块为您的线程或子进程输出打开第二个控制台

这是一个示例代码:

import win32console
import multiprocessing

def subprocess(queue):
    win32console.FreeConsole() #Frees subprocess from using main console
    win32console.AllocConsole() #Creates new console and all input and output of subprocess goes to this new console
    while True:
        print(queue.get())
        #prints any output produced by main script passed to subprocess using queue

if __name__ == "__main__":
    queue = multiprocessing.Queue()
    multiprocessing.Process(target=subprocess, args=[queue]).start()
    while True:
        print("Hello World")
        queue.put("Hello to subprocess console")
        #sends above string to subprocess which prints it into its own console

        #and whatever else you want to do in ur main process

您也可以使用线程来执行此操作。如果您想要队列功能,则必须使用队列模块,因为线程模块没有队列

这是win32console 模块文档

于 2021-03-31T09:38:16.857 回答