除了脚本自己的控制台(什么都不做)我想打开两个控制台并在不同的地方打印变量con1
和con2
控制台,我该如何实现。
con1 = 'This is Console1'
con2 = 'This is Console2'
我不知道如何实现这一点,并花了几个小时尝试使用诸如 subprocess
之类的模块来实现,但没有成功。顺便说一句,我在 Windows 上。
编辑:
threading
模块能完成这项工作吗?还是需要 multiprocessing
?
例如:
最佳答案
如果你不想reconsider your problem and use a GUI例如 @Kevin's answer然后你可以使用 subprocess
模块同时启动两个新控制台并在打开的窗口中显示两个给定的字符串:
#!/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
的简化版本:
#!/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()
关于python - 如何从一个脚本打开两个控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479504/