2016-05-09 15 views
0
def run_cmd(self, cmd): 
    print cmd 

    status = os.system(cmd) 
    print 'Command ran with Status: %s' % status 

    if status: 
     s = 'Command Failed: Status: %s for %s' % (status, cmd) 
     print s 
     sys.exit(status) 
    else: 
     s = 'Command Success: %s' % cmd 

    return status 

私はこの関数を使って別のスクリプトからpythonスクリプトを実行しています。Pythonスクリプトから別のスクリプトを実行する

例:

command_to_exec = 'python script_b.py' 
run_cmd(command_to_exec) 

今script_b.pyがステータスでscript_a.py終了を失敗した場合。

これは問題ありません。

ケース2

command_to_exec = 'python script_a.py --options' 
rum_cmd(command_to_exec) 

このケースでは、それ自体からscript_a.pyランニング 'のpython script_a.py' です。 この場合、新しく生成されたscript_a.pyが失敗した場合でも、script_a.pyの内側はscript_a.pyの内部エラー(sys.exit(ステータス)のため)を捕捉できなかったため、まだ成功しています

今、このような状況にどう対処しますか? (内部script_aが失敗した場合、外側script_aは終了する必要があります)

+2

なぜこのようなスクリプト全体を呼び出すのですか?なぜ、あなたが必要とする部分をインナースクリプトにインポートして実行しないのですか? 「inner」スクリプトで関数を呼び出さないのはなぜですか? – davo36

+0

サブプロセスを使用することがありますhttps://docs.python.org/2/library/subprocess.html#replacing-os-system – Ashish

+0

'sys.argv [0]'をテストすることで自分自身の実行を防ぐことができます。これは恐ろしいフォーク爆弾(継続的に産卵プロセス)。 – cdarke

答えて

0

他のスクリプトをモジュールとして実行するだけです。 --- main.py
      | | --- imported.py
そして、あなたは最初から2番目を実行したい
DIR
     :あなたはフォルダを持っているとしましょう。ちょうどそのようなimportを使用します。

import imported #the file name without the extension 

これは、そのファイルを実行すると、あなたはそれがあなたのメインのスクリプトでVARSや機能だ使用することができるようになります。

+0

私は、生成されたスクリプトに与えるオプションが異なるので、私の場合は不可能です。 –

+0

スクリプトを関数に挿入し、引数を渡すだけです... –

関連する問題