gpt4 book ai didi

python - 我可以在 Python 中将打开的 gzip 文件与 Popen 一起使用吗?

转载 作者:太空狗 更新时间:2023-10-30 00:08:35 24 4
gpt4 key购买 nike

我有一个从标准输入读取的命令行工具。在命令行上,我会运行...

./foo < bar

或者...

cat bar | ./foo

我可以运行 gzip 文件

zcat bar.gz | ./foo

在 Python 中我可以做...

Popen(["./foo", ], stdin=open('bar'), stdout=PIPE, stderr=PIPE)

可是我做不到

import gzip
Popen(["./foo", ], stdin=gzip.open('bar'), stdout=PIPE, stderr=PIPE)

我不得不跑

p0 = Popen(["zcat", "bar"], stdout=PIPE, stderr=PIPE)
Popen(["./foo", ], stdin=p0.stdout, stdout=PIPE, stderr=PIPE)

我做错了什么吗?为什么我不能将 gzip.open('bar') 用作 Popen 的标准输入参数?

最佳答案

因为子进程的'stdin'和'stdout'带的是文件描述符(是一个数字),是操作系统资源。这被以下事实所掩盖:如果您传递一个对象,子流程模块会检查该对象是否具有“fileno”属性,如果有,它将使用它。

“gzip”对象不是操作系统提供的。打开的文件是,套接字是,管道是。 Gzip对象是一个提供read()和write()方法但没有fileno属性的对象。

你可以看看 subprocess 的 communicate() 方法,你可能想使用它。

关于python - 我可以在 Python 中将打开的 gzip 文件与 Popen 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com