SPy*_*SPy 7 python file python-3.x python-os
我想关闭一些使用 os.startfile() 打开的文件,例如 .txt、.csv、.xlsx。
我知道这个问题之前问过,但我没有找到任何有用的脚本。
我使用的是windows 10环境
我认为问题的措辞有点误导 - 实际上你想关闭用os.startfile(file_name)
不幸的是,os.startfile它没有为您提供返回进程的任何句柄。
help(os.startfile)
一旦关联的应用程序启动,startfile 就会返回。没有等待应用程序关闭的选项,也没有办法检索应用程序的退出状态。
幸运的是,您还有另一种通过 shell 打开文件的方法:
shell_process = subprocess.Popen([file_name],shell=True)
print(shell_process.pid)
Run Code Online (Sandbox Code Playgroud)
返回的 pid 是父 shell 的 pid,而不是进程本身的 pid。杀死它是不够的——它只会杀死一个 shell,而不是子进程。我们需要找到孩子:
parent = psutil.Process(shell_process.pid)
children = parent.children(recursive=True)
print(children)
child_pid = children[0].pid
print(child_pid)
Run Code Online (Sandbox Code Playgroud)
这是您要关闭的 pid。现在我们可以终止该进程:
os.kill(child_pid, signal.SIGTERM)
# or
subprocess.check_output("Taskkill /PID %d /F" % child_pid)
Run Code Online (Sandbox Code Playgroud)
请注意,这在 Windows 上有点复杂 - 没有os.killpg
更多信息:如何终止使用 shell=True 启动的 python 子进程
另外,PermissionError: [WinError 5] Access is denied当我尝试用以下命令杀死 shell 进程本身时,我收到了os.kill
os.kill(shell_process.pid, signal.SIGTERM)
Run Code Online (Sandbox Code Playgroud)
subprocess.check_output("Taskkill /PID %d /F" % child_pid)为我的任何进程工作,没有权限错误请参阅WindowsError:[错误5]访问被拒绝
| 归档时间: |
|
| 查看次数: |
11472 次 |
| 最近记录: |