【问题标题】:Subshell in python subprocesspython子进程中的子shell
【发布时间】:2018-06-09 23:44:34
【问题描述】:

在 python 脚本中,我需要启动一个命令,例如

kill $(ps aux | grep httpd | awk '{print $2}')

使用子流程 我尝试使用https://stackoverflow.com/a/29755431/1355628中的函数拆分命令

该函数可以使用带有管道的简单命令,但不幸的是,上面的命令似乎不起作用(返回码似乎是完全随机的......)

先谢谢了

【问题讨论】:

  • 你的最终目标是什么,你想用python杀死一个正在运行的进程吗?
  • 我需要处理多种方式来停止进程。有时一个简单的“服务 xxx 停止”就可以了,但对于某些进程来说还不够(需要杀死)

标签: python bash subprocess


【解决方案1】:

subprocess.run 采用可选的shell=True 参数,它将在子shell 中运行您的命令。 但是,如果您正在处理用户输入,请务必阅读 Security Considerations

另一个(更好的,imo)解决方案是使用psutil 包和os.kill,如下所示:

import psutil
processes = [p for p in psutil.pids() if 'httpd' in psutil.Process(p).name()]
for process in processes:
    os.kill(...)

【讨论】:

  • 我尝试过类似的方法:cmd = "kill $(ps aux | grep proces[s] | awk '{print $2}');rm -f /var/lock/process && service process start" pop = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True) pop.wait() print "return code is : %d" % pop.returncode 在 bash 中执行命令很好,但在 python 中会导致失败:“返回码是 -15”(而不是 0)
猜你喜欢
  • 2012-01-10
  • 2011-11-16
  • 2016-01-04
  • 2012-03-21
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2021-02-13
  • 2023-03-09
相关资源
最近更新 更多