2011-07-24 38 views
7

を終了していないだろう、私は次のPythonコードがあります。Pythonの実行システムコマンドとし、終了...

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

をそれは、コマンド罰金を実行し、ウィンドウがポップアップ表示されます。ただし、最初のスクリプトは終了しません。ただそこにとどまり、最終的にプロセスを強制終了する必要があります。エラーは発生しません。どうしたの?

+0

try os._exit(0) – Eddie

+3

問題は、コマンドが実行終了するまで 'os.system(command)'関数がブロックされていることです.OPが望むのは、コマンドが終了するのを待たずにコマンドを実行することです。 –

+0

@ダンちゃん!私はそれが問題だと気づいただけです。 Pythonスクリプトが実行されているので、それはまだ "シェル"内で生きており、os.systemはシェルが終了するまで待たなければなりません。どうすればいい? –

答えて

10

の代わりos.system使用が終了します。

import subprocess 
import sys 

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

os.system(command)のようなことに注意してください:

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

ターミナルウィンドウ内から一番上のスクリプトを実行している場合は、スクリプトと 'cmd.exe'自体を終了した後でもこのウィンドウが開いてしまうことがあります!このウィンドウの内側からいくつかのバックグラウンドプロセスを開始しました。これらのプロセスが終了すると、ウィンドウが閉じます。 – spacediver

0
import sys ,subprocess 

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

Popen from subprocess moduleあなたが探しているもの。これは、コマンドを実行し、それを待たないとsubprocess.Popen

0

私が使用することをお勧めsys.exitではなくos._exitの代わりにsys.exitはプログラムを終了しますが、例外レベルを上げる、または終了しますスレッド。 os._exit(-1)はプログラム全体を終了します

0

KeyboardInterruptsとシグナルは、プロセス(メインスレッド)のみが認識します。何らかの種類のファイルの読み書きブロックによってネストされたコマンドがハングアップすると、キーボードコマンドを使用してプログラムを終了することはできません。

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

ディスク・ブロックのソースを排除することができない場合は、その一つの方法は、あなたがそれを殺す強制することができますので、スレッドでの処理をラップすることです。しかし、これを行うと、半分書いたファイルや破損したファイルをディスクに残すことができます。

関連する問題