0

単純なはずの問題があります。ちなみに、私はすでにモジュールを使用しているmultiprocessingので、モジュールを使用するのは少し気が進まないsubprocess。とにかく、関数を介してfoo.py別のPythonプログラムを開始するPythonプログラムがあります。bar.pyos.system()

os.system("start python bar.py")

他の複雑な理由から、これは、ある種の子プロセスを開始するのではなく、この方法で実行する必要があります。問題は、のpidを知りたいということですbar.py。これを行うための最もエレガントまたは効率的な方法は何ですか?現時点ではbar.py、pidを一時ファイルに書き込んでfoo.py読み取ることでこの問題を回避していますが、もっと良い方法があるはずだと感じています。

ちなみに、 。を使用してコマンドライン引数として渡すことができるため、明らかにbar.py、のpidを知るのは簡単です。foo.pyfoo.pyos.system

4

1 に答える 1

3

マルチプロセッシング!=サブプロセス

os.system('...')の代わりにマルチプロセッシングでサブプロセスを使用し、Popenオブジェクトで「.pid」と入力して必要なものを取得することもできます。

ここでわかるように、サブプロセスはos.systemを置き換えることができます(そしてそれを使用する必要があります!)。

あなたの場合、プロセスIDが必要なので、ここにある例のようにPopenオブジェクトを作成できます。次に、コードを数行記述しましょう。

import subprocess
args = ['/path/to/python', 'bar.py']
process = subprocess.Popen(args, shell=True, creationflags=subprocess.CREATE_NEW_CONSOLE) # you can also set only shell=True
print process.pid
于 2013-02-21T14:08:16.280 に答える