Hov*_*voK 0 python subprocess python-3.x
操作系统:Windows 10 Python:3.5.2我试图打开calc.exe做一些动作,然后关闭它。这是我的代码示例
import subprocess, os, time
p = subprocess.Popen('calc.exe')
#Some actions
time.sleep(2)
p.kill()
Run Code Online (Sandbox Code Playgroud)
因此,这对于calc.exe不起作用,它只是打开计算器,但没有关闭它,但是对于“ notepad.exe”来说,相同的代码工作正常。
我猜在子进程库中有一个用于进程终止方法的错误。因此,任务管理器中的notepad.exe进程名称为notepad.exe,但是calc.exe进程名称为Calculator.exe,因此,我猜测它正在尝试按名称杀死它并找不到它。
中没有错误subprocess.kill。如果您真的对此感到担心,请检查docs链接的源代码。该方法只调用,除非过程已经完成,否则仅调用,您可以看到该函数的Windows实现。简而言之:不在乎进程在内核的进程表(或任务管理器)中的名称;它会记住它启动的进程的PID(进程ID),并以此方式将其杀死。killsend_signalos.killsubprocess.Process.kill
最可能的问题是,与许多Windows应用程序一样,它calc.exe具有一些特殊的“单个实例”代码:启动它时,如果calc.exe会话中已经有正在运行的副本,它只是告诉该副本进入前台(然后打开)窗口(如果没有),然后退出。因此,到kill2秒钟后尝试时,该过程已经退出。
如果实际运行的过程是calculator.exe,则意味着calc.exe它只是真实程序的启动器,因此它总是告诉calculator.exe来到前台,在必要时启动它,然后退出。
那么,如何杀死您启动的新计算器?好吧,你不能,因为你没有开始新的。您可以杀死所有 calc.exe和/或calculator.exe进程(最简单的方法是使用第三方库,例如psutil-请参阅有关过滤的示例,然后kill找到找到的进程),但这将杀死您现有的任何计算器进程在运行程序之前已打开,而不仅仅是您启动的新程序。由于calc.exe无法确定您是否已开始新流程,因此实际上无法解决。
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |