私は学生のプログラムを採点するプログラムを書いていますが、ご想像のとおり、時々セグメンテーション違反が発生します。私が抱えている問題は、学生がセグメンテーション違反をプログラムしたときに、何が起こったのかを示す兆候がないことです。
proc = subprocess.Popen(student_command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
self.stdout, self.stderr = proc.communicate()
self.returncode = proc.returncode
、stderr
、stdout
および からのリターン コードを取得しますsubprocess
が、プログラム セグメンテーション フォールトの場合、stderr
空stdout
であり、空であり、リターン コードは -11 です。ここで、-11 終了コードを探して、それが戻りコードである場合、セグメンテーション違反があったと想定できますが、生徒が戻りたいと感じたという理由だけで、生徒のコードが戻りコードとして -11 を持つことを妨げるものは何もありません。 -11.
-11 を返すように感じるのではなく、サブプロセスのセグメンテーションが失敗したかどうかをどのように判断しますか? 私は stderr と stdout にあるものについてはあまり気にしません。そのために、これを含む出力の取得を扱う多くの投稿を見てきましたが、出力についてはそれほど気にしません。 stderr から "Segmentation Fault" 文字列を取得できればいいのですが、本当に必要なのは、サブプロセスに何が起こったのかを明確に伝える方法です。