启动一个python控制台并控制其输出

时间:2014-08-02 17:22:44

标签: python subprocess

我需要启动一个python控制台并控制其输出。我正在使用python subprocess.Popen()创建一个新实例。

我在python脚本中保存了以下代码并从windows命令提示符运行它。当我运行脚本时,它会在当前的Windows命令提示符下启动python实例,不要在单独的控制台中启动它。

p = subprocess.Popen(["C:\Python31\python.exe"], shell=False,
          #       stdin=subprocess.PIPE,
                 stdout=subprocess.PIPE)
out, _ = p.communicate()
print(out.decode())

2 个答案:

答案 0 :(得分:1)

在Windows中,您可以使用CREATE_NEW_CONSOLE创建标记在新的控制台会话中生成子进程:

from subprocess import Popen, CREATE_NEW_CONSOLE, PIPE

p = Popen(["C:\Python31\python.exe"], creationflags=CREATE_NEW_CONSOLE)

答案 1 :(得分:0)

如果您在 Windows 上,您可以使用 win32console 模块为您的线程或子进程输出打开第二个控制台。如果您使用的是 Windows,这是最简单、最简单的方法。

这是一个示例代码:

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 in main console")
        queue.put("Hello work in sub process console")
        #sends above string to subprocess and it prints it into its console

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

您也可以使用线程来做到这一点。如果你想要队列功能,你必须使用队列模块,因为线程模块没有队列

这是win32console module documentation