结合 subprocess.Popen 和 timeout 并将输出写入文件

问题描述

经过大量研究,我还没有找到完全解决我的任务的答案。我正在执行 Linux 命令(其中 6 个连续执行)并且输出(stdout 和 stderr)必须保存到输出文件中,我最终成功了。

问题是一些使用 subprocess.popen() 执行的 Linux 命令陷入无限循环,然后这些命令必须在 60 秒后终止。将 subprocess.poll 与 subprocess.kill 结合使用,杀死进程并不总是成功 - 在大多数情况下,进程仍在运行,并且必须通过运行“ps”和 kill [pid] 手动终止进程,这不会使进程自动化高效。

我也尝试了 subprocess.check_output ,它有超时并停止卡住的进程,但这个方法不能使用 stdout 像 stdout = subprocess.PIPE 这将允许 proc.communicate()[0] 收集输出并将其写入文件。我尝试的另一个解决方案是使用 psutil,但我使用的是 Windows,因此它会检测 Windows 进程,我需要终止 Linux 进程。

是否有任何解决方案以某种方式将 popen 和 check_output 结合起来,并将超时作为参数?每次只有 check_output 中的超时才能真正杀死进程。我的代码如下。

+ Service [redacted] in region europe-north1

URL:     https://[redacted].a.run.app
Ingress: all
Traffic:
  100% LATEST (currently [redacted])

Last updated on 2021-01-19T13:48:46.172388Z by [redacted]:
  Revision [redacted]
  Image:            eu.gcr.io/[redacted]/[redacted]:c0a2e7a6-56d5-4f6f-b241-1dd9ed96dd30
  Port:             8080
  Memory:           256Mi
  cpu:              1000m
  Service account:  [redacted]-compute@developer.gserviceaccount.com
  Env vars:
    WEB_CONCURRENCY 2
  Concurrency:      80
  Max Instances:    2
  Timeout:          300s

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)