我试图杀死SimpleHTTPServer
我的剧本。手动执行该命令可以正常工作。
Starting SimpleHTTPServer in background:
-bash-4.2$ python -m SimpleHTTPServer 8080 &
[1] 26345
Verifying SimpleHTTPServer process:
-bash-4.2$ ps -ef | grep SimpleHTTPServer
x 26345 20169 0 17:44 pts/21 00:00:00 python -m SimpleHTTPServer 8080
Killing SimpleHTTPServer:
-bash-4.2$ kill -9 `ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print $2}'`
Verifying SimpleHTTPServer is killed or not:
-bash-4.2$ ps -ef | grep SimpleHTTPServer
x 26356 20169 0 17:45 pts/21 00:00:00 grep --color=auto SimpleHTTPServer
脚本中的相同内容无法正常工作。我正在使用subprocess.Popen
。
subprocess.Popen(["kill", "-9", "`ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print $2}'`"])
(Pdb++) kill: cannot find process "`ps -ef | grep SimpleHTTPServer | grep 8080 | awk '{print $2}'`"
您正在尝试在该kill
命令中的外壳管道周围使用外壳反引号。但是您正在尝试不使用它shell=True
。你不能那样做。
您可以构建一个sh
命令行并使用来运行它shell=True
,但这通常是一个坏主意。
subprocess
关于使用subprocess
模块替换旧函数的文档显示了如何在Python中执行与使用Shell相同的操作。这是一个更好的主意,但需要一些工作。
但是最简单的事情就是不调用任何这些东西。
ps|grep|grep|awk
来查找流程的PID,因为您是Popen
编辑过该流程的,所以只是proc.pid
。kill
任何的,因为你仍然有Popen
各地的对象,所以你可以打电话kill
,terminate
或send_signal
在其上。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句