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

启动python控制台并控制其输出,python,subprocess,Python,Subprocess,我需要启动python控制台并控制其输出。我正在使用python subprocess.Popen()创建一个新实例 我将以下代码保存在python脚本中,并在windows命令提示符下运行它。当我运行脚本时,它会在当前windows命令提示符下启动python实例,不要在单独的控制台中启动它 p = subprocess.Popen(["C:\Python31\python.exe"], shell=False, # stdin=subprocess.PIPE,

我需要启动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())

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

from subprocess import Popen, CREATE_NEW_CONSOLE, PIPE

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

如果您在windows上,则可以使用Win32 console模块为线程或子进程输出打开第二个控制台。如果您在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
您也可以通过线程来实现这一点。如果需要队列功能,则必须使用队列模块,因为线程模块没有队列


这是新打开的控制台open and get vanish,因为我需要控制输出,我必须使用stdout=subprocess.pipe。我还注意到,如果我在命令中使用参数,那么新打开的控制台open and get vanish p=Popen([“C:\Python31\python.exe C:\demo.py”],creationflags=CREATE\u NEW\u console)仅供参考,接下来要注意的是标准输出是缓冲的。所以,如果您没有得到预期的输出,您可以尝试手动刷新或使用stderr。