からサブプロセスを呼び出すときに、私はのpython3にプロジェクトを移植していると私はWindows上で予期しないエラーに実行している無効です毎回プロセスがサブプロセスを使用して作成されて、私はこの例外を持っている:subprocess
呼び出しから作成されている場所OSErrorのは:、基本的にはWindows上のPython 3.6に</p> <p>:[WinError 6]ハンドルは、Python 3.6
d:\temp\backpack\venv\myvenv_py3.6\lib\site-packages\git\cmd.py:1011: in _call_process
return self.execute(call, **exec_kwargs)
d:\temp\backpack\venv\myvenv_py3.6\lib\site-packages\git\cmd.py:732: in execute
**subprocess_kwargs
D:\temp\cpython-3.6.3\Lib\subprocess.py:611: in __init__
_cleanup()
D:\temp\cpython-3.6.3\Lib\subprocess.py:220: in _cleanup
res = inst._internal_poll(_deadstate=sys.maxsize)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <subprocess.Popen object at 0x0000000004FD53C8>
_deadstate = 9223372036854775807
_WaitForSingleObject = <built-in function WaitForSingleObject>
_WAIT_OBJECT_0 = 0, _GetExitCodeProcess = <built-in function GetExitCodeProcess>
def _internal_poll(self, _deadstate=None,
_WaitForSingleObject=_winapi.WaitForSingleObject,
_WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
_GetExitCodeProcess=_winapi.GetExitCodeProcess):
"""Check if child process has terminated. Returns returncode
attribute.
This method is called by __del__, so it can only refer to objects
in its local scope.
"""
_log.debug('proc._internal_poll self.pid=%s self._handle=%s self.returncode=%s self=%s', self.pid, self._handle, self.returncode, self)
if self.returncode is None:
> if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
E OSError: [WinError 6] The handle is invalid
D:\temp\cpython-3.6.3\Lib\subprocess.py:1051: OSError
は、それは問題ではありません(このプロジェクトでは、それはGitPython
パッケージからとplumbum
から多くのです) 。
この実行はbuild script
venv/Scripts/coverage run -m pytest -v tests/
を呼び出すこの傘の下で発生します。しかし、私はまた、生殖の面ではvenv/Scripts/pytest --cov=mypackage --cov-config .coveragerc - tests/
でpytest-cov
を試してみた:
- を私の勝利7 PC上で常にパス :(
- 勝利7仮想マシン上:
- それは常には、それが常にを失敗したときに[
<build script>
がvenv/Scripts/coverage run -m pytest
を起動する] - を失敗しましたとき
coverage run -m pytest
venv - から直接呼び出されたが、
pytest
はvirtualenvのそれは常にが、どんなに<build script>
がある場合に失敗します勝利10 PC上
- それは常には、それが常にを失敗したときに[
- から直接起動されたときには、常にはを渡しています呼び出された、または
coverage
場合やpytest
はvenvから直接呼び出され
私がこれまで持っている唯一の手掛かりは、このStackOverflowのスレッドからです:https://stackoverflow.com/a/43975118 より正確に言えば、モジュールの_cleanup
メソッドに関連する有用なものを指す最初に受け入れられた回答からのコメントです。
このスレッドの回答:https://stackoverflow.com/a/40108817/501074で問題を修正できませんでした。 –
サブプロセスを使用しているコードは実際にどのように見えますか? –