有没有办法打开第二个 python 控制台并让新控制台运行,而原始控制台继续运行,当新控制台完成时,它以变量的形式将其数据发送回原始控制台?
5 回答
也许您应该研究多处理或多线程模块。这些可以帮助您从原始(父)程序中生成子进程。
该sub-process
模块可能是您正在寻找的。但是,问题是,您会在整个程序完成后获得该过程的输出。这意味着,如果您尝试运行的程序永远运行,您将无法看到输出,直到它退出(通过强制它或使用终止方法)。
如何将输出分配给变量的示例如下:
output,error=your_process.communicate()
这的输出部分是您将使用的(基于您的问题)。但是,如果您运行它并且出现问题(不返回 0),则会出现错误。如果您不希望捕获错误,则可以简单地将其分配给_
.
另请注意,如果您使用关键字参数,我建议使用该shlex
库将您的字符串拆分为参数。(您可以只使用常规字符串,例如:var="mypythonprogram.py argument1 argument2"
并使用arguments=shlex.split(var)
,然后您可以将其提供给子流程的参数。
如果您不需要与程序交互,另一种选择是使用线程,关于它们的堆栈溢出有很多问题,以及官方和互联网上其他网站上的大量文档。
阅读Python 多处理。它具有在进程之间交换对象的示例。
听起来您想做类似于多处理库提供的东西。如果没有更多信息,我所能做的就是将您指向文档。
例如:
http://www.ibm.com/developerworks/aix/library/au-multiprocessing/ 或 http://docs.python.org/library/multiprocessing.html
如果您在 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
您也可以使用线程来执行此操作。如果您想要队列功能,则必须使用队列模块,因为线程模块没有队列