除了脚本自己的控制台 (不执行任何操作)之外, 我想打开两个控制台并打印变量,con1并con2在不同的控制台中,如何实现此目的。
con1
con2
con1 = 'This is Console1' con2 = 'This is Console2'
我不知道如何实现这一目标,并花了几个小时尝试使用诸如subprocess但没有运气的模块来实现这一目标。顺便说一下,我在窗户上。
subprocess
请问threading模块做的工作?还是multiprocessing需要?
threading
multiprocessing
如果您不想重新考虑问题并使用@Kevin回答中的GUI,则可以使用subprocessmodule同时启动两个新控制台,并在打开的窗口中显示两个给定的字符串:
#!/usr/bin/env python3 import sys import time from subprocess import Popen, PIPE, CREATE_NEW_CONSOLE messages = 'This is Console1', 'This is Console2' # open new consoles processes = [Popen([sys.executable, "-c", """import sys for line in sys.stdin: # poor man's `cat` sys.stdout.write(line) sys.stdout.flush() """], stdin=PIPE, bufsize=1, universal_newlines=True, # assume the parent script is started from a console itself e.g., # this code is _not_ run as a *.pyw file creationflags=CREATE_NEW_CONSOLE) for _ in range(len(messages))] # display messages for proc, msg in zip(processes, messages): proc.stdin.write(msg + "\n") proc.stdin.flush() time.sleep(10) # keep the windows open for a while # close windows for proc in processes: proc.communicate("bye\n")
这是一个不依赖的简化版本CREATE_NEW_CONSOLE:
CREATE_NEW_CONSOLE
#!/usr/bin/env python """Show messages in two new console windows simultaneously.""" import sys import platform from subprocess import Popen messages = 'This is Console1', 'This is Console2' # define a command that starts new terminal if platform.system() == "Windows": new_window_command = "cmd.exe /c start".split() else: #XXX this can be made more portable new_window_command = "x-terminal-emulator -e".split() # open new consoles, display messages echo = [sys.executable, "-c", "import sys; print(sys.argv[1]); input('Press Enter..')"] processes = [Popen(new_window_command + echo + [msg]) for msg in messages] # wait for the windows to be closed for proc in processes: proc.wait()