我在使用该subprocess
模块的 Python 中似乎有一段简单的代码时遇到了一些问题。
我的目标是我有一个gzip
格式的文件,我想读取该文件,将其解压缩并通过其他一些将其插入数据库的外部实用程序运行它。
出于某种原因,每当我communicate()
在第二个子进程上调用该方法时,我的整个进程都会永远挂起,并且没有任何内容插入到我的数据库中。我肯定在管道、标准输出和标准输入方面做错了,但不能完全弄清楚是什么,所以任何帮助将不胜感激。
我已经尝试了相同的过程,文件根本没有压缩,只有 1 个子进程调用外部实用程序,但效果很好。
from subprocess import Popen, PIPE
cmd_load_resolved = "nzload -host <host> -u <user> -pw <password> -db <database> -t <table>"
cmd = Popen(["gunzip"], stdin=PIPE, stdout=PIPE)
nz = Popen(cmd_load_resolved.strip().split(" "), stdin=cmd.stdout, stdout=PIPE, stderr=PIPE)
for raw in file_key:
cmd.stdin.write(raw)
cmd.stdin.close() # not sure if needed, i tried without but doesn't change anything
cmd.stdout.close()
nz.communicate() # hangs forever
有什么想法吗?