2012-04-15 10 views
2

現在、私はPython os.system(cmd)を使っていくつかの毎日の作業を行っています。コマンドがまだ完了していないと、Python os.system()が自動的に終了します

cmdが完了するまでに5〜6分かかりますが、私はこのコマンドを普通に実行しますが、os.system(cmd)に入れると、cmdがまだ終了していないときには自動的に終了します。

私の質問は、この問題をどのように処理するか、タイムアウト値を設定するか、このジョブを終了するための良い方法がありますか?

ありがとうございます!

+0

をはい、ありがとうマイケル。私は文書をチェックし、結果は見つかりませんでした。いくつかのURLやいくつかの情報をここに提供できますか?多くの方々に感謝します。 –

+0

'cmd'文字列はどのように見えますか? – Keith

答えて

3

subprocessモジュールを試しましたか?それは、他の古いosの方法の中でos.systemを置き換えるために追加されました。次はかなりまっすぐドキュメントからです:

import os 
import subprocess 

proc = subprocess.Popen(cmd, shell=True) 
pid, sts = os.waitpid(proc.pid, 0) 

# you may check on this process later and kill it if it's taking too long 
if proc.poll() in [whatever, ...]: 
    os.kill(proc.pid) 

か、プロセスが終了している理由をデバッグしようとしている場合:

import subprocess 
import sys 

try: 
    retcode = subprocess.call(cmd, shell=True) 
    if retcode < 0: 
     print >>sys.stderr, "Child was terminated by signal", -retcode 
    else: 
     print >>sys.stderr, "Child returned", retcode 
except OSError, e: 
    print >>sys.stderr, "Execution failed:", e 
+0

ありがとうmVchr、あなたはとても速いです。私はあなたの方法を私のEnvで試してみます。いくつかの質問があります:1:私のenvで、戻りコード233、それはどういう意味ですか? 2そして実際には私は質問でmationed、それは1つのシェルスクリプト(* .bin)、pythonを使用して呼び出すと./***.bin、そこに別のですか?ありがとうございます –

+0

1:これは私が知っている標準的なシェル終了コードではないので、あなたが実行しているプロセスを調べなければならないでしょう... 2:あなたの#で何が設定されているかによって異なります! – mVChr

関連する問題