gpt4 book ai didi

python - 子进程调用停止异步执行的Python父进程

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:43 25 4
gpt4 key购买 nike

以下 shell session 演示了我所看到的行为:

[user@compname python-test]$ cat test.py
#!/usr/bin/env python
import subprocess
from time import sleep
proc = subprocess.Popen("ffmpeg", stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
print "Starting process: " + str(proc)
status = proc.poll()
while status is None:
print "Process still running."
sleep(0.01)
status = proc.poll()
print "Status: " + str(status)
[user@compname python-test]$ python test.py
Starting process: <subprocess.Popen object at 0x7f2893f27150>
Process still running.
Process still running.
Status: 1
[user@compname python-test]$ python test.py &
[4] 6976
[user@compname python-test]$ Starting process: <subprocess.Popen object at 0x7ffa0ea82150>
Process still running.
Process still running.
[4]+ Stopped python test.py
[user@compname python-test]$ ps
PID TTY TIME CMD
4684 pts/101 00:00:00 python
4685 pts/101 00:00:00 ffmpeg
7183 pts/101 00:00:00 ps
14385 pts/101 00:00:00 bash

如您所见,当简单的测试Python程序正常运行时,它成功完成。当异步运行时(使用 &),一旦子进程调用完成,Python 进程就会停止(并且 poll() 将返回一个非 值)。

  1. 使用 Popen.wait() 时会发生相同的行为
  2. 该行为是 ffmpeg 所独有的。
  3. Python 进程和 ffmpeg 最终都停止了,如对 ps 的调用所示。

有人可以帮我解决这种行为吗?我在 subprocess 模块、bash 的 & 运算符或 ffmpeg 的文档中没有看到任何可以解释这一点的内容。

Python版本为2.6.6,bash为GNU bash版本4.1.2(1)-release (x86_64-redhat-linux-gnu),ffmpeg版本为3.0.1-static。

感谢您的帮助!

最佳答案

当 shell=False 时是否会发生同样的情况?使用 shell=False 时,您必须指向可执行文件的直接路径。

关于python - 子进程调用停止异步执行的Python父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36922653/

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