OSError: [WinError 6] Das Handle ist ungültig, wenn der Subprozess von Python 3.6 aufgerufen wird

8

Ich portiere ein Projekt nach Python3 und es tritt ein unerwarteter Fehler unter Windows auf:

Grundsätzlich unter Python 3.6 unter Windows, jedes Mal, wenn ein Prozess mit Subprozess erstellt wird, habe ich diese Ausnahme:

%Vor%

Es spielt keine Rolle, wo der subprocess -Aufruf erstellt wird (in diesem Projekt ist es eine Menge aus dem GitPython -Paket und aus plumbum ).

Diese Ausführung erfolgt unter diesem Dach: build script , das venv/Scripts/coverage run -m pytest -v tests/ aufruft. Aber ich habe auch probiert pytest-cov mit venv/Scripts/pytest --cov=mypackage --cov-config .coveragerc - tests/ In Bezug auf die Reproduktion:

  • auf meinem Win 7 PC passiert es immer : (
  • auf einer virtuellen Win 7-Maschine:
    • es ist immer fehlgeschlagen , wenn [ <build script> ruft venv/Scripts/coverage run -m pytest ]
    • auf
    • es ist immer fehlgeschlagen , wenn coverage run -m pytest direkt vom vent
    • aufgerufen wird
    • aber es geht immer durch wenn pytest direkt vom virtualenv
    • aufgerufen wird
  • auf einem Win 10 PC wird es immer fehlschlagen , egal ob der <build script> aufgerufen wird, oder ob coverage oder pytest direkt vom venv
  • aufgerufen werden

Der einzige Hinweis, den ich bisher bekommen habe, stammt von diesem StackOverflow-Thread: Ссылка Genauer gesagt sind es die Kommentare aus der ersten akzeptierten Antwort, die auf etwas Nützliches im Zusammenhang mit der _cleanup -Methode aus dem subprocess -Modul verweisen.

    
costy.petrisor 28.11.2017, 15:52
quelle

1 Antwort

1

Nach ein bisschen Pause fand ich schnell den Grund dafür.

Dies war wegen der Verwendung von GitPython im Projekt, die git.Repo.close() nicht aufgerufen hat oder git.Repo als Kontextmanager verwendet hat. Es gibt eine Warnung darüber in der Readme von GitPython .

Es war hilfreich, die Anmeldung in subprocess s _internal_poll method hinzuzufügen, um zu wissen, welcher Prozess ( args ) der Schuldige ist. Für GitPython war es git cat-file ...

    
costy.petrisor 06.12.2017, 07:41
quelle

Tags und Links