2017-06-27 3 views
0

Jupiter Notebookからの私の最初の問題/観察はここにあります。%%bash IPythonコンソールでも再現するマジックセルです。ノートブックのページからいくつかのMPIプログラムを立ち上げるつもりです。ここでは、シンプルな再生装置としてdateシステムコマンドを使用します。Pythonのサブプロセスすべてのコマンドを処理する前にPopenがハングします

In [1]: %%bash 
    ...: echo "First" 
    ...: mpirun -np 2 date 
    ...: echo "Second" 
    ...: mpirun -np 2 date 
    ...: echo "End" 
    ...: 
First 
mar. juin 27 15:17:36 CEST 2017 
mar. juin 27 15:17:36 CEST 2017 

最初のmpirunコマンドだけが実行され、その後はすべて実行されません。私はおそらくPopen何か最初mpirun後にすべてのコマンドの実行を停止するようだが行方不明です

from subprocess import * 
from IPython.utils import py3compat 
def test(s): 
    p = Popen(['bash'], stdout=PIPE, stderr=PIPE, stdin=PIPE) 
    out, err = p.communicate(s.encode('utf8', 'replace')) 
    print(py3compat.bytes_to_str(out)) 
test("""echo "First" 
mpirun -np 2 date 
echo "Second" 
mpirun -np 2 date 
echo "End" """) 

:この動作は直接subprocess.Popenと、以下のサンプルコードを参照してください再現します。すべてが一つのライン上に置かれたとき、私は期待される結果を得るが、それはIPython魔法の細胞にとって本当に興味深いものではありません。

test("""echo "First"; mpirun -np 2 date; echo "Second";mpirun -np 2 date; echo "End" """) 

なぜPopenハング理由で任意のアイデア? フィードバックありがとうございます。

(IPython-5.4.1でのPython-2.7.13を使用して、Linux上でテストされ、またIPython 6.1.0とPythonの3.6.1を使用し、OpenMPIの-1.10.xおよび2.1.Xのいくつかのバージョンを使用して)

+0

私はPython 3.6.1とiPython 6.1.0を利用していますが、そのような問題はありません。 [1]:https://i.stack.imgur.com/78dut.png \t 私は、Python 3.6.1と6.1.0 iPythonを利用していると私はその問題を持っていません。ここに画像の説明を入力してください 私はPythonのバージョンとiPythonのバージョンを変更することがわかります。あなたはこの動作を引き起こしているあなたのbashにいくつかの設定をしているかもしれません。 – Gilbert

答えて

0

シェル以外のものにはbashが必要ですか?あなたはshell = True Popenオプションを使用して、コマンドの文字列をPopenに直接渡すことができますか?私のためにそのように動作します:

commands = """mpirun -np 2 date 
mpirun -np 2 date 
mpirun -np 2 date""" 
p = Popen(commands, stdout=PIPE, stderr=PIPE, stdin=PIPE, shell=True) 
p.stdout.read() 
'Thu Jun 29 00:41:16 UTC 2017\nThu Jun 29 00:41:16 UTC 2017\nThu Jun 29 00:41:16 UTC 2017\nThu Jun 29 00:41:16 UTC 2017\nThu Jun 29 00:41:16 UTC 2017\nThu Jun 29 00:41:16 UTC 2017\n' 
関連する問題