2番目のPythonコンソールを開いて、元のコンソールが稼働し続けている間に新しいコンソールを実行し、新しいコンソールが終了すると、変数の形式で元のコンソールにデータを送り返す方法はありますか?
5 に答える
おそらく、マルチプロセッシングまたはマルチスレッドモジュールを調べる必要があります。これらは、元の(親)プログラムから子プロセスを生成するのに役立ちます。
モジュールはsub-process
あなたが探しているものかもしれません。ただし、問題は、プログラム全体が終了した後にプロセスの出力を取得することです。つまり、実行しようとしているプログラムが永久に実行された場合、(強制するか終了メソッドを使用して)終了するまで出力を表示できません。
出力を変数に割り当てる方法の例は次のとおりです。
output,error=your_process.communicate()
これの出力部分は、(質問に基づいて)使用するものです。ただし、エラーは、それを実行して問題が発生した場合に発生するものです(0を返しません)。エラーをキャプチャする必要がない場合は、に割り当てることができます_
。
また、キーワード引数を使用している場合はshlex
、文字列を引数に分割するためにライブラリを使用することをお勧めします。(:などの通常の文字列var="mypythonprogram.py argument1 argument2"
を使用して使用するarguments=shlex.split(var)
と、サブプロセスの引数にそれを指定できます。
プログラムを操作する必要がない場合のもう1つのオプションは、スレッドを使用することです。スレッドに関するスタックオーバーフローに関する多くの質問があり、公式およびインターネット上の他のWebサイトにも多数のドキュメントがあります。
Pythonマルチプロセッシングについて読んでください。プロセス間でオブジェクトを交換する例があります。
マルチプロセッシングライブラリが提供するようなことをしたいようです。詳細情報がない場合、私にできることはドキュメントを参照することだけです。
例えば:
http://www.ibm.com/developerworks/aix/library/au-multiprocessing/ または http://docs.python.org/library/multiprocessing.html
Windowsを使用している場合は、win32consoleモジュールを使用して、スレッドまたはサブプロセス出力用の2番目のコンソールを開くことができます。
サンプルコードは次のとおりです。
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")
queue.put("Hello to subprocess console")
#sends above string to subprocess which prints it into its own console
#and whatever else you want to do in ur main process
スレッドを使用してこれを行うこともできます。スレッドモジュールにはキューがないため、キュー機能が必要な場合は、キューモジュールを使用する必要があります