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的命令将在子 shell 中运行时,您将立即退出该进程。此外,您在该子 shell 中运行的命令也在后台运行,因为&最后,您可以将$!其作为参数传递wait给它,以等待最后一个后台进程退出。

于 2012-12-13T19:47:14.163 回答