26
votes

Is there a way that python can close a windows application (example: Firefox) ?

I know how to start an app, but now I need to know how to close one.

6
What kind of application do you mean? A python application? An external one? - Stedy
@Stedy Firefox, i'm using python to open a web page every 2 hours and i need to close that page after 5 minutes. - acrs
@user514584: why are you using an external program to open a webpage instead of using urllib? - Wooble
@Wooble I did not know about urllib and the page that i'm opening will need flash player. - acrs

6 Answers

27
votes
# I have used os comands for a while
# this program will try to close a firefox window every ten secounds

import os
import time

# creating a forever loop
while 1 :
    os.system("TASKKILL /F /IM firefox.exe")
    time.sleep(10)
7
votes

in windows you could use taskkill within subprocess.call:

subprocess.call(["taskkill","/F","/IM","firefox.exe"])

/F forces process termination. Omitting it only asks firefox to close, which can work if the app is responsive.

Cleaner/more portable solution with psutil (well, for Linux you have to drop the .exe part or use .startwith("firefox"):

import psutil,os
for pid in (process.pid for process in psutil.process_iter() if process.name()=="firefox.exe"):
    os.kill(pid)

that will kill all processes named firefox.exe

By the way os.kill(pid) is "overkill" (no pun intended). process has a kill() method, so:

for process in (process for process in psutil.process_iter() if process.name()=="firefox.exe"):
    process.kill()
6
votes

If you're using Popen, you should be able to terminate the app using either send_signal(SIGTERM) or terminate().

See docs here.

0
votes

In order to kill a python tk window named MyappWindow under MS Windows:

from os import system
system('taskkill /F /FI "WINDOWTITLE eq MyappWindow" ')

stars maybe used as wildcard:

from os import system 
system('taskkill /F /FI "WINDOWTITLE eq MyappWind*" ')

Please, refer to "taskkill /?" for additional options.

0
votes

On OS X:

  1. Create a shell script and put:
killall Application

Replace Application with a running app of your choice.

In the same directory as this shell script, make a python file. In the python file, put these two lines of code:

from subprocess import Popen
Popen('sh shell.sh', shell=True)

Replace shell.sh with the name of your created shell script.