2

subprocessモジュールを使用した Python の単純なコードのように見えるものにいくつか問題があります。

私の目標は、gzipフォーマットされたファイルがあることです。そのファイルを読み取り、解凍し、データベースに挿入する他の外部ユーティリティを介して実行します。

何らかの理由でcommunicate()、2 番目のサブプロセスでメソッドを呼び出すたびに、プロセス全体が永久にハングし、データベースに何も挿入されません。私は確かにパイプ、標準出力、および標準入力で何か間違ったことをしていますが、何を理解していないので、助けていただければ幸いです。

まったく圧縮されていないファイルと、外部ユーティリティを呼び出す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