4

次のコード スニペットを含む Python モジュールをテストしています。

        r, w = os.pipe()
        pid = os.fork()
        if pid:
            os.close(w)        # use os.close() to close a file descriptor
            r = os.fdopen(r)   # turn r into a file object
            # read serialized object from ``r`` and persists onto storage medium
            self.ofs.put_stream(bucket, label, r, metadata)
            os.waitpid(pid, 0) # make sure the child process gets cleaned up
        else:
            os.close(r)
            w = os.fdopen(w, 'w')
            # serialize object onto ``w``
            pickle.dump(obj, w)
            w.close()
            sys.exit(0)
        return result

すべてのテストに合格しましたが、 に関しては問題sys.exit(0)があります。sys.exit(0)実行すると が発生します。SystemExitこれは によって傍受さpy.testれ、コンソールにエラーとして報告されます。

内部で何が行われているかは詳しくわかりませんが、py.test先に進み、子プロセスによって発生したそのようなイベントを無視してしまうようです。最終的に、すべてのテストがパスします。これは良いことです。

しかし、コンソールにきれいな出力が欲しいです。

py.testクリーンな出力を生成する方法はありますか?

ご参考までに:

  • Debian ジェシー、カーネル 3.12.6
  • パイソン 2.7.6
  • pytest 2.5.2

ありがとう :)

4

3 に答える 3

2

(自分の質問に答える)

これらのイベントに関連付けられたシグナルを発生させずに、実行を終了できます。そのため、 の代わりにsys.exit(n)を使用os._exit(n)nます。 は目的のステータス コードです。

例:

import os
os._exit(0)

クレジット: sys.exit() から発生した SystemExit 例外がキャッチされないようにする方法はありますか?

于 2014-02-11T15:14:09.033 に答える
1
def test_mytest():

    try:
        # code goes here
        # like
        # import my_packaage.__main__
        # which can raise
        # a SystemExit 
    except SystemExit:
        pass

    assert(True)

ここで見つけました。

于 2017-05-11T04:33:10.897 に答える