gpt4 book ai didi

bash 脚本的 Python subprocess.check_call 不等待子进程完成

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:50 27 4
gpt4 key购买 nike

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 运行这段 python 代码返回 0,但是使用 sleep_time = 1 返回 50000。

原因似乎是没有等待 bash 子进程完成。可能是我对 wait 函数的使用不正确。我做了实验,但没有找到令人满意的解决方案。

最佳答案

当您使用 /bin/bash 时,您的命令将在子 shell 中运行,因此您将立即退出该进程。您在该子 shell 中运行的命令也在后台运行,因为末尾有 &,您可以将 $! 作为参数传递给 wait 让它等待直到最后一个后台进程退出。

关于bash 脚本的 Python subprocess.check_call 不等待子进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com