打开第二个Python控制台

时间:2012-07-23 23:26:40

标签: python console

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

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

output,error=your_process.communicate()

这是您将使用的输出部分(基于您的问题)。但是,如果运行它并且出现问题(不返回0),则会出现错误。如果您不想捕获错误,那么您只需将其分配给_

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

如果你不需要与程序交互的另一个选择是使用Threads,关于它们的堆栈溢出有很多问题,以及正式的大量文档,以及其他网站遍布互联网。

答案 2 :(得分:0)

阅读Python multiprocessing。它有一些在进程之间交换对象的例子。

答案 3 :(得分:0)

听起来你想做的事情就像多处理库提供的那样。有了更多信息,我所能做的就是指向文档。

例如:

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

答案 4 :(得分: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 module documentation