启动python控制台并控制其输出
我需要启动python控制台并控制其输出。我正在使用python subprocess.Popen()创建一个新实例 我将以下代码保存在python脚本中,并在windows命令提示符下运行它。当我运行脚本时,它会在当前windows命令提示符下启动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,
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。