【发布时间】:2020-11-15 19:00:24
【问题描述】:
我正在尝试使用 subprocess.Popen 杀死一个 .exe。
解决方案为:
- taskkill /im (.exe) /t /f
- taskkill /pid (.exe) /t /f
无法正常工作,因为响应被拒绝访问。事实上,当我从子进程运行 cmd 时,我无法获得管理员权限。
我找到了一个从 cmd 中杀死这个进程的命令(不以管理员身份运行),它是:
- wmic process where name=".exe" 删除
...但是当我使用子进程运行它时,它给了我“无效查询”。 我正在运行的命令是:
4)subprocess.Popen(['wmic', 'process', 'where', 'name="-------.exe"', 'delete'], shell=True, stdout=subprocess .管道)
我想我写错了。有什么建议吗?
【问题讨论】:
-
尝试删除文件名周围的引号,因为无论如何您都在此处指定单独的参数。这行得通吗?
-
听起来像是一些奇怪的逃避不兼容...在黑暗中拍摄,可能不是最好的解决方案:
['cmd', '/c', 'wmic process where name="openvpn.exe" delete']或者只是将整个事情作为字符串传递:subprocess.popen('wmic process where name="openvpn.exe" delete') -
接下来我要做的是使用Process Monitor 来查看实际上传递给 wmic 的命令行(将过滤器设置为“操作”“以”“进程”开头)并将其与您从 cmd 工作时的外观进行比较。这可能会提供有关问题所在的线索。
-
哦,酷。在这种情况下,如果您能针对自己的问题写一个答案,那就太好了,这样未来的读者也可以找到解决方案!您以后也可以自行接受答案。
-
您不应将参数列表与
shell=True混合使用;它有时会以奇怪的方式工作,但基本上总是一个错误。另见stackoverflow.com/questions/3172470/…
标签: python windows subprocess wmic