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
何かご意見は?