python - 为什么使用子进程时会出现 FileNotFoundError?

标签 python subprocess file-not-found

我的代码:

parser = xml.sax.make_parser()
handler = WikiXmlHandler()
parser.setContentHandler(handler)
for line in subprocess.Popen(['bzcat'], 
                            stdin=open(path), 
                            stdout=subprocess.PIPE).stdout:
    try:
        parser.feed(line)
    except StopIteration:
        break

错误:

File "c:/Users/Leon/Documents/VS Code/film.py", line 92, in <module>
    for line in subprocess.Popen(['bzcat'],
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1520.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1520.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 1307, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden

我确实导入子流程。

文件 C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1520.0_x64__qbz5n2kfra8p0\lib\subprocess.py 存在。

最佳答案

显然bzcat不在您的PATH中。它不是提示找不到 subprocess.py,而是提示找不到您想要运行的命令。

无论如何,你不需要子进程来读取 .bz2 文件;请参阅bz2 module在Python标准库中。

import bz2

with bz2.open(path, 'rt') as handle:
    for line in handle:
        parser.feed(line)

与基本上任何压缩格式一样,bzip2 是一种二进制格式,因此您应该使用 open(path, 'rb')bz2.open() 函数(有点奇怪)默认为二进制模式;如果您想读取并解码为文本,则必须显式指定 'rt'

关于python - 为什么使用子进程时会出现 FileNotFoundError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63324565/

相关文章:

javascript - 使用应用程序名称和命名空间在 django 模板 url 中动态添加 js 变量值

ios - header 搜索路径麻烦 Grabkit

python - 如何在 Dash 中创建按钮以从系列中排除值

python - Python 中的 CSV 文件到 JSON 文件

python - Pandas groupby 将非空值计数为百分比

python - 子进程启动两个进程而不是一个

python - 持久性 python 子进程

python - 无法使用 popen 启动两个交互式 shell

android - Cordova - Android - 找不到文件错误

centos - 找不到 libedit : Centos, 安装 openssh