user825286
user825286

Reputation:

Python run system command and then exit... won't exit

I have the following python code:

os.system("C:/Python27/python.exe C:/GUI/TestGUI.py")
sys.exit(0)

It runs the command fine, and a window pops up. However, it doesn't exit the first script. It just stays there, and I eventually have to force kill the process. No errors are produced. What's going on?

Upvotes: 12

Views: 40871

Answers (4)

Eric Leschinski
Eric Leschinski

Reputation: 153872

KeyboardInterrupts and signals are only seen by the process (ie the main thread). If your nested command hangs due to some kind of file read or write block, you won't be able to quit the program using any keyboard commands.

Why does a read-only open of a named pipe block?

If you can't eliminate the source of the disk block, then one way is to wrap the process in the thread so you can force kill it. But if you do this, you leave opportunity for half-written and corrupted files on disk.

Upvotes: 1

utdemir
utdemir

Reputation: 27216

import sys ,subprocess

subprocess.Popen(["C:/Python27/python.exe", "C:/GUI/TestGUI.py"])
sys.exit(0)

Popen from subprocess module what you are looking for.

Upvotes: 0

user2151098
user2151098

Reputation: 1

I suggest using os._exit instead of sys.exit, as sys.exit doesnt quit a program but raises exception level, or exits a thread. os._exit(-1) quits the entire program

Upvotes: 0

Dan D.
Dan D.

Reputation: 74645

instead of os.system use subprocess.Popen

this runs a command and doesn't wait for it and then exits:

import subprocess
import sys

subprocess.Popen(["mupdf", "/home/dan/Desktop/Sieve-JFP.pdf"])
sys.exit(0)

note that os.system(command) like:

p = subprocess.Popen(command)
p.wait()

Upvotes: 22

Related Questions