Reputation:
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
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
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
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
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