2

我在使用该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

有什么想法吗?

4

0 回答 0