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は終了する必要があります)
なぜこのようなスクリプト全体を呼び出すのですか?なぜ、あなたが必要とする部分をインナースクリプトにインポートして実行しないのですか? 「inner」スクリプトで関数を呼び出さないのはなぜですか? – davo36
サブプロセスを使用することがありますhttps://docs.python.org/2/library/subprocess.html#replacing-os-system – Ashish
'sys.argv [0]'をテストすることで自分自身の実行を防ぐことができます。これは恐ろしいフォーク爆弾(継続的に産卵プロセス)。 – cdarke