0

次のコマンドを使用して、AmazonEC2Ubuntuインスタンスで別のPythonスクリプトから1つのPythonスクリプトを起動します。

os.system(call) 

callフォームはどこにありますか

"./script2.py arg1 arg2 arg3"

私は時々、script2.pyどういうわけか時期尚早に終了することに気づきました。いくつかのロギングステートメントがありますが、何が起こっているのかが表示されません。だから私の質問は:

  1. system()ある種の終了ステータスを返すことを読みました。正常終了と異常終了を区別するための最良のテストは何ですか?つまり、なんらかの異常終了が発生した場合にのみ、呼び出し元のスクリプト内にログメッセージを生成したいと思います。
  2. 終了したプロセスの痕跡を見つけることができるようなシステムログはありますか?
4

2 に答える 2

2

子スクリプトが何かに標準出力を使用せず、クラッシュ時にゼロ以外を返すと仮定します(pythonただし、これは実行可能ファイルのデフォルトである必要があります)。

import subprocess as sp

try:
    sp.check_output(['python', 'child.py'], stderr=sp.STDOUT)
except sp.CalledProcessError as err:
    print 'Child terminated abnormally with error %d, log:' % err.returncode
    print err.output
于 2012-12-11T15:46:23.843 に答える
0

1> os.systemは、プロセスが実行されて正常に終了した0を返す場合、システムコードを返しますが、任意の数を返す場合、通常はエラーを意味しますが、プログラムが成功時に1を返す場合、プログラムがエラーにどのように応答するかによって異なります。 os.systemは1を返します

例えば

d = os.system('ls')
print d 
d = os.system(your process)
print d

2> pythonは、次のように試すことができるsyslogモジュールを提供します

>>>import syslog
>>>help(syslog)

syslogは、OS自体によって提供される組み込みのUNIXAPIです。

http://docs.python.org/2/library/syslog.html

于 2012-12-11T15:10:53.717 に答える