python子进程中的子shell
Posted
技术标签:
【中文标题】python子进程中的子shell【英文标题】:Subshell in python subprocess 【发布时间】:2018-06-09 23:44:34 【问题描述】:在 python 脚本中,我需要启动一个命令,例如
kill $(ps aux | grep httpd | awk 'print $2')
使用子流程 我尝试使用https://***.com/a/29755431/1355628中的函数拆分命令
该函数可以使用带有管道的简单命令,但不幸的是,上面的命令似乎不起作用(返回码似乎是完全随机的......)
先谢谢了
【问题讨论】:
你的最终目标是什么,你想用python杀死一个正在运行的进程吗? 我需要处理多种方式来停止进程。有时一个简单的“服务 xxx 停止”就可以了,但对于某些进程来说还不够(需要杀死) 【参考方案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)以上是关于python子进程中的子shell的主要内容,如果未能解决你的问题,请参考以下文章