4

プログラムから複数のPythonスクリプトを生成(フォーク?)したい(Pythonでも記述)。

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

pexpectos.execlpを使用してみましos.forkptyたが、どちらも期待どおりに機能しません。

子プロセスを生成し、それらを忘れたい(それらはいくつかのデータを処理し、私が読み取ってpexpect終了できる端末に出力を書き込みます)。

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

psなぜ私がSTDOUTに書き込み、そこから読み取るのかを尋ねる前に、私はSTDOUTに書き込みを行わず、の出力を読み取りますtshark

4

4 に答える 4

5

subprocess モジュールを参照してください

subprocess モジュールを使用すると、新しいプロセスを生成し、入力/出力/エラー パイプに接続して、リターン コードを取得できます。このモジュールは、次のような他のいくつかの古いモジュールと機能を置き換えることを意図しています。

os.system

os.スポーン*

os.popen*

popen2.*

コマンド。*

于 2009-06-07T13:12:46.050 に答える
1

Python 3.5 以降では、次のことができます。

    import subprocess

    result = subprocess.run(['python', 'my_script.py', '--arg1', val1])
    if result.returncode != 0:
        print('script returned error')

これにより、stdout と stderr も自動的にリダイレクトされます。

于 2020-01-11T13:34:10.543 に答える
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
于 2009-06-09T14:15:19.953 に答える
0

1 つの端末または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 行の 'python' を置き換えるだけです。

注: 上記のコードはテストしていません。pexpectの過去の経験から返信しています。

于 2014-07-12T17:14:43.860 に答える