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")
运行与sleep_time = 0
返回0,这条巨蟒的代码,但sleep_time = 1
返回50000Python的subprocess.check_call不等待子进程结束
的原因似乎是在没有等待让bash子流程完成。可能我使用wait
函数是不正确的。我做了实验,但没有找到满意的解决方案。
不确定它会直接帮助你解决问题,但是你应该能够通过运行而不是'shell = True'或者运行'executable ='/ bin/bash''来降低这个操作的复杂性。现在,你启动'sh'只是为了转身并启动'bash',而不用真正使用'sh'外壳。 –
由括号运行的子查询中的实验提示不等于bash。据我所知,subshell作业对父进程不可见,所以没有标准命令来等待它们。 –
您是否考虑过尝试在本地Python中执行此操作,而不是生成shell命令?可能更容易处理这种方式... –