有没有办法打开第二个python控制台并让新控制台在原控制台继续运行时运行,当新控制台完成时,它会以变量的形式将其数据发送回原始控制台? / p>
答案 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
您也可以使用线程来做到这一点。如果你想要队列功能,你必须使用队列模块,因为线程模块没有队列