打开第二个Python控制台

打开第二个Python控制台,python,console,Python,Console,有没有办法打开第二个python控制台,让新控制台在原始控制台继续运行时运行,当新控制台完成时,它会以变量的形式将数据发送回原始控制台?请继续阅读。它有在进程之间交换对象的示例。听起来您想做一些类似于多处理库提供的事情。如果没有更多的信息,我所能做的就是给你指出文档 例如: 或 子流程模块可能就是您正在寻找的。然而,问题是,在整个程序完成后,您将获得进程的输出。这意味着,如果您试图运行的程序永远运行,您将无法看到输出,直到退出(通过强制退出或使用终止方法) 如何将输出分配给变量的示例如下: o

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

请继续阅读。它有在进程之间交换对象的示例。

听起来您想做一些类似于多处理库提供的事情。如果没有更多的信息,我所能做的就是给你指出文档

例如:


子流程模块可能就是您正在寻找的。然而,问题是,在整个程序完成后,您将获得进程的输出。这意味着,如果您试图运行的程序永远运行,您将无法看到输出,直到退出(通过强制退出或使用终止方法)

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

output,error=your_process.communicate()
这篇文章的输出部分是您将要使用的内容(基于您的问题)。但是,如果您运行它并且出现问题(不返回0),则会出现错误。如果您不想捕获错误,那么只需将其分配给
\uuu

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


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

也许您应该研究多处理或多线程模块。这些模块有助于您生成新的线程脱离原始(父)程序的子进程。

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

下面是一个示例代码:

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
您也可以通过线程来实现这一点。如果您想要队列功能,则必须使用队列模块,因为线程模块没有队列


这是一个

是的,但是如何使用取决于你想用它做什么。你可以做,但它看起来很复杂。你想做什么?你能详细说明一下吗?-1:如果“python控制台”中的OP表示python REPL,那么多处理模块不是解决方案。
.communicate()
是一种来自
子流程
模块的
Popen
类的方法。没有足够的详细信息以其当前形式为问题提供合理的答案。@J.F.Sebastian:在OP接受答案后,仅仅因为问题不明确,就值得对所有3个答案进行否决吗?@Scotty:@J.F.Sebastian:看起来确实如此有点糟糕,他们因为我的含糊不清而受到指责。顺便说一句,你能解释一下什么是“REPL”吗?我从来没听说过这个词。@Scotty:“在整个程序完成后获得进程的输出”,所以你所说的“全部”是指原始的和新的控制台。