为什么在使用子进程时会出现 FileNotFoundError?
Why do I get a FileNotFoundError when using subprocess?
我的代码:
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
个文件;请参阅 Python 标准库中的 bz2
module。
import bz2
with bz2.open(path, 'rt') as handle:
for line in handle:
parser.feed(line)
基本上与任何压缩格式一样,bzip2 是一种二进制格式,因此您应该使用 open(path, 'rb')
。 bz2.open()
函数(有点好奇)默认为二进制模式;如果你想读取和解码为文本,你必须明确指定 'rt'
。
我的代码:
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
个文件;请参阅 Python 标准库中的 bz2
module。
import bz2
with bz2.open(path, 'rt') as handle:
for line in handle:
parser.feed(line)
基本上与任何压缩格式一样,bzip2 是一种二进制格式,因此您应该使用 open(path, 'rb')
。 bz2.open()
函数(有点好奇)默认为二进制模式;如果你想读取和解码为文本,你必须明确指定 'rt'
。