13

スクリプト自体のコンソール(何もしない)とは別に、2 つのコンソールを開いて変数con1con2出力し、別のコンソールに表示したいのですが、どうすればこれを達成できますか。

con1 = 'This is Console1'
con2 = 'This is Console2'

subprocessこれを達成する方法がわかりませんが、運が悪いなどのモジュールを使用して数時間を費やしました。ちなみに私はウィンドウズです。


編集:

threadingモジュールは仕事をしますか?またはmultiprocessing必要ですか?

例えば:

ここに画像の説明を入力

4

7 に答える 7

14

問題を再考したくなく、 @Kevin の回答のようなGUI を使用したくない場合は、モジュールを使用して 2 つの新しいコンソールを同時に起動し、開いているウィンドウに 2 つの指定された文字列を表示できます。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()
于 2013-11-05T19:49:25.450 に答える
4

あなたに合っているかどうかはわかりませんが、Windowsstartコマンドを使用して 2 つの Python インタープリターを開くことができます。

from subprocess import Popen
p1 = Popen('start c:\python27\python.exe', shell=True)
p2 = Popen('start c:\python27\python.exe', shell=True)

もちろん、Python が対話モードで実行されるようになったという問題がありますが、これはあなたが望むものではありません (ファイルをパラメーターとして渡すこともでき、そのファイルが実行されます)。

Linux では、名前付きパイプを作成し、ファイルの名前を python.exe に渡し、そのファイルに python コマンドを書き込みます。「たぶん」それはうまくいくでしょう;)

しかし、Windows で名前付きパイプを作成する方法がわかりません。Windows API ... (自分自身を埋める)。

于 2013-11-09T22:54:34.430 に答える