環境
- Windows
- Adobe Substance 3D Painter 10.1.2
- pytest 8.3.4
前提
Substance 3D PainterはコマンドラインからPythonを実行することが出来ないためPython Console (REPL) からpytestを実行する手段を考えます。
方法
Python Consoleから下記のようなコードで実行出来ます。
>>> import pytest
>>> pytest.main(args=["file_or_dir", "-p", "no:faulthandler"])
説明
関数
Python Consoleから実行するためにまずpytest.exeが呼び出している関数を確認します。
エントリーポイント (__main__.py) を見ると
if __name__ == "__main__":
raise SystemExit(pytest.console_main())
となっているので次に pytest.console_main() を確認します。
pytest.console.main() は pytest/__init__.py から _pytest/config/__init__.py の console_main関数であることがわかります。
さらに _pytest/config/__init__.py の console_main関数を確認すると、コードとdocstringから
_pytest/config/__init__.py のmain関数を利用すればよいと判断できます。
また _pytest/config/__init__.py のmain関数については pytest/__init__.py の __all__ の定義でパッケージからimportされるため、最終的に
>>> pytest.main(args=None, plugins=None)
を実行すればよいということがわかります。
引数
_pytest/config/__init__.py のmain関数のdocstringを読むと args にpytestのコマンドライン引数をリスト形式で渡せばよいことがわかります。
faulthandlerの無効化
Substance 3D Painterでは sys.__stderr__ が None であるためfaulthalderを無効化せずpytestを実行すると INTERNALERROR が発生します。
そのためfaulthandlerを無効化 (-p no:faulthandler) します。
