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
功能的使用不正确。我做了实验,但没有找到令人满意的解决方案。