【问题标题】:How to close subprocess in python如何在python中关闭子进程
【发布时间】:2020-06-03 11:53:35
【问题描述】:

我有一个 python 代码,我在其中使用子进程在函数中获取命令“which opatch”的输出,该函数将输出作为 getOpatch 的 unix 路径。完成后,如何关闭使用 Popen 打开的子进程。下面是我用来调用子进程的代码。提前致谢。

import os
import subprocess

os.environ["ORACLE_HOME"] = X
os.environ["PATH"] += os.pathsep + os.pathsep.join([X + "/OPatch"])
getOpatch = subprocess.Popen("which opatch", shell=True, stdout=subprocess.PIPE).stdout
op_path = getOpatch.read()

【问题讨论】:

  • 问题是当我运行具有差异输入 ($PATH) 的不同函数 2 时,子进程变量 2 返回与函数 1 中相同的值
  • 请澄清您的问题。子流程完成后自动关闭,无需手动关闭。您对os.environ 的更改是否仍然存在?
  • os.environ 值在每次传递新值时都会发生变化,但 subprocess.Popen 在获取“which opatch”的输出时不会更改为最新的。
  • 谢谢MisterMiyagi...我明白你的意思。将检查建议并回复您。

标签: python subprocess


【解决方案1】:

subprocess.terminate() 应该杀了它

【讨论】:

  • 我在使用终止时遇到错误。文件“/z01/EBS_PATCH_TOOL/modules_seq.py”,第 106 行,在 OHome_1012 subprocess.terminate() AttributeError: 'module' object has no attribute 'terminate'
  • 这是因为它应该是getOpatch.terminate()。具有terminate 方法的是Popen 实例,而不是直接具有subprocess
  • 无论如何,本例中启动的命令(本质上是sh -c 'which opatch')会在打印一行输出后立即退出,因此没有充分的理由尝试终止它。跨度>
猜你喜欢
  • 2011-12-30
  • 2013-07-19
  • 1970-01-01
  • 2017-03-01
  • 2021-12-06
  • 2017-01-09
  • 1970-01-01
  • 2013-05-03
  • 2015-09-15
相关资源
最近更新 更多