How can I open two consoles from a single script

前端 未结 6 1137
渐次进展
渐次进展 2020-11-29 05:32

Apart from the scripts own console (which does nothing) I want to open two consoles and print the variables con1 and con2 in different con

6条回答
  •  [愿得一人]
    2020-11-29 06:02

    If you don't want to reconsider your problem and use a GUI such as in @Kevin's answer then you could use subprocess module to start two new consoles concurrently and display two given strings in the opened windows:

    #!/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")
    

    Here's a simplified version that doesn't rely on 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()
    

提交回复
热议问题