【问题标题】:python subprocess, redirecting exit code to a filepython子进程,将退出代码重定向到文件
【发布时间】:2021-02-06 21:21:57
【问题描述】:

使用子进程 run()/popen(),我们可以将 stdout 和 stderr 重定向到外部文件。有什么方法也可以重定向退出代码吗?

【问题讨论】:

  • r = subprocess.run(...) 并将r.returncode 写入 python 中的文件怎么样?
  • 不,因为它下面的操作系统不是这样工作的。
  • man wait(2),不要使用run函数。这是一个便利功能。您可以通过直接使用 Popen 来更好地控制子进程。
  • 如果您的子流程在源代码中是可修改的,您可以拦截大多数终止信号,并快速保存状态并退出尊重信号。要知道 SIGKILL(9) 不能被拦截,不管它处于什么状态它都会破坏进程。
  • @keith 我的意思是 popen()。我已经更新了这个问题。谢谢

标签: python subprocess


【解决方案1】:

只需读取subprocess.run的返回对象的returncode属性,并将其写入文件。

import subprocess

r = subprocess.run(["ls"])
with open("returncode.txt", "w") as f:
    f.write(str(r.returncode))

【讨论】:

  • 我的调用函数可能会在 subprocess.run() 的执行过程中被杀死,有什么方法可以在 run() 函数中指定它吗?
  • 好吧,据我所知,如果调用函数被杀死,您使用子进程运行的程序将立即停止并且不会产生退出代码@GauravPathak
  • returncode 是一个整数。在写入之前需要以某种方式进行序列化。
  • @GauravPathak 但是你能告诉我更多关于调用函数如何被“杀死”的细节吗?
  • 我的想法是,您可以在进程期间存储守护进程的状态,一旦旧守护进程被杀死并产生新守护进程,它将从存储中获取状态
猜你喜欢
  • 1970-01-01
  • 2014-04-22
  • 2015-04-04
  • 2012-06-24
  • 2018-01-11
  • 2015-10-13
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
相关资源
最近更新 更多