WinError 6:句柄无效来自 Electron 应用程序中的 python check_output spawn

Pas*_*ula 4 python pyinstaller electron

我有一个 Electron 应用程序xxx.exe,它生成一个从 PyInstaller 创建的可执行文件yyy.exe。在 , 中yyy.exe,我终于尝试git通过subprocess.check_output(). 可悲的是,调用check_output()throws [WinError 6] The handle is invalid

如果yyy.exe直接在命令行上启动,一切运行正常。该问题仅发生在 Windows 上。我的假设是有一些检查stdin会触发异常,因为通过 Electron 应用程序运行不提供任何标准输入。

任何提示将不胜感激!提前致谢!

Ery*_*Sun 7

在 Windows 上,subprocess.Popen尝试复制非零标准句柄并在它们无效时失败。您可以将stdin和重定向stderr到 NUL。例如:

import os

try:
    from subprocess import DEVNULL
except ImportError:
    DEVNULL = os.open(os.devnull, os.O_RDWR)

output = subprocess.check_output(cmd, stdin=DEVNULL, stderr=DEVNULL)
Run Code Online (Sandbox Code Playgroud)

  • @AstitvaSrivastava,再次,我打算让 `DEVNULL` 成为 Python 2 中模块级别的全局常量。我没有编写一个每次调用时都会打开 `os.devnull` 的函数。如果您这样做,则需要关闭文件描述符,并在 try-finally 中调用“check_output”,以保证在“finally”块中调用“os.close”。 (2认同)