2
N = 50000
with open('input', 'w') as f:
    for i in range(N):
        f.write(str(i) + '\n')

run_command = '/bin/bash -e -o pipefail -c "((sort | tee >/dev/null >(cat | (tee >/dev/null >(sort >&3)))) <input 3>output)& wait"'

subprocess.check_call(run_command, shell=True)

time.sleep(sleep_time)

print sh.wc("output", "-l")

この python コードを実行するとsleep_time = 0、0 がsleep_time = 1返されますが、50000 が返されます。

その理由は、bash サブプロセスが終了するのを待たないことにあるようです。おそらく、wait関数の使用方法が正しくありません。実験を行いましたが、満足のいく解決策は見つかりませんでした。

4

1 に答える 1

1

コマンドがサブシェルで実行される場合/bin/bash、すぐにプロセスを終了します。また、そのサブシェルで実行しているコマンドはバックグラウンドで実行されています。これは、最後のバックグラウンド プロセスが終了するまで待機するようにパラメーターとして&渡すことができるためです。$!wait

于 2012-12-13T19:47:14.163 に答える