2009-06-07 13 views
3

私のプログラム(Pythonで書かれている)から複数のPythonスクリプトを生成(fork?)したいですか?Pythonプログラムから複数のPythonスクリプトを生成する方法は?

私の問題は、pexpectを使用して出力を収集するので、1つの端末を各スクリプト専用にしたいということです。

私はpexpectos.execlp、およびos.forkptyを使用しようとしましたが、どちらも期待したとおりに行っていません。

子プロセスを生成して忘れてしまいます(データを処理して、pexpectで読み込み可能な端末に出力して終了します)。

ライブラリ/ベストプラクティスなどはありますか?この仕事を達成するために?

p.s.私がSTDOUTに書き込んでそれから読む理由を聞く前に、私はSTDOUTに書き込まないと言います。私はtsharkの出力を読みます。

答えて

5

subprocess module

subprocessモジュールを使用すると、新しいプロセスを生成する彼らの入力/出力/エラーパイプに接続し、そのリターンコードを取得することができます。を参照してください。

os.system

os.spawn *

os.popen *

たpopen2 *

:このモジュールは、次のようないくつかの他、古いモジュールや機能を、交換する意向コマンド*

0

なぜこれが期待されるのか分かりません。 tsharkはその出力をstdoutに送るべきであり、いくつかの奇妙な理由のためにのみstderrにそれを送るでしょう。

したがって、何をする必要がありますしたい:

import subprocess 

fp= subprocess.Popen(("/usr/bin/tshark", "option1", "option2"), stdout=subprocess.PIPE).stdout 
# now, whenever you are ready, read stuff from fp 
0

あなたは一つの端末または 1 Pythonシェルを捧げたいですか?

すでにPopenとSubprocessに便利な答えがありますが、すでに使用している場合はpexpectを使用することもできます。

#for multiple python shells 
import pexpect 

#make your commands however you want them, this is just one method 
mycommand1 = "print 'hello first python shell'" 
mycommand2 = "print 'this is my second shell'" 

#add a "for" statement if you want 
child1 = pexpect.spawn('python') 
child1.sendline(mycommand1) 

child2 = pexpect.spawn('python') 
child2.sendline(mycommand2) 

あなたが望む限り多くの子供たち/殻を作り、その後、あなたの応答を取得するためにchild.before()またはchild.after()を使用します。

「mycommand1」ではなく、送信する定義やクラスを追加することもできますが、これは単なる例です。

あなたは、Linuxでの端末の束を作りたいと思った場合、あなただけのpextpext.spawnライン

ノートの「パイソン」を交換する必要があります:私は上記のコードをテストしていません。私はpexpectで過去の経験から返答するだけです。

関連する問題