我正在尝试用 python 启动一个程序subprocess.Popen,并stdin成为一些常规文本文件,就像这样。
subprocess.Popen(args, stdout=stdoutFile, stderr=stderrFile, stdin=open(TEXT_FILE))
Run Code Online (Sandbox Code Playgroud)
而且效果很好。但如果我尝试打开压缩文件,我的过程就会失败。
import gzip
subprocess.Popen(args, stdout=stdoutFile, stderr=stderFile, stdin=gzip.open(GZFILE))
Run Code Online (Sandbox Code Playgroud)
我不知道为什么。我的进程认为它没有获取任何数据。
知道为什么吗?2个不应该可以互换吗?
如果传递 的返回值gzip.open(..),则其内部文件描述符将传递给该文件;从子进程中读取它将返回原始数据,而不是解压后的数据。
您需要将解压缩的数据传递到子进程的标准输入:
subprocess.Popen(args, stdout=stdoutFile, stderr=stderFile,, stdin=subprocess.PIPE)
with gzip.open(GZFILE) as f:
shutil.copyfileobj(f, p.stdin)
# p.stdin.close() # to denote the end of the file.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |