私はstdin経由で入力を受け付けるコマンドラインユーティリティ(exiftool)を持っています。サブプロセスでコマンドを繰り返す.Popen
次のようになりますのpythonからそれを呼び出す:パイプを経由して使用されている
ps = Popen(['exiftool','-groupNames','-json', '-'], stdin=PIPE, stdout=PIPE)
:予想通り
with open(ffile, 'r') as fh:
ps.stdin.write(fh.read())
ps.stdin.close()
print ps.stdout.read()
ps.wait()
が、これは、渡されたffile
の内容でexiftoolを実行した結果を出力議論として。
私はループ内でこのコードを繰り返し呼び出すことができますが、呼び出しごとにfork
という結果になりますが、実際には遅いです(これは早すぎる最適化のケースではありません)。
私はexiftoolを一度開いてからPopenを再利用し、複数のファイルを配管し、それぞれの出力を保存する方法があるのだろうかと思います。
exiftool(catとは異なります)は、行単位での入力ではなく、一部の区切り文字による入力ではなく、チャンク全体の入力として解釈されるようです。しかしおそらく、exiftoolプロセスの標準をハックすることで可能でしょうか?
exiftoolはコマンドラインツールではなく、perlライブラリでもあるようです。おそらくあなたのプログラムの入力を待ち、ライブラリ関数を直接呼び出すperlスクリプトを書くことができます。 – Gribouillis
または、フォークアウトするのではなくPython exifライブラリを使用してください –
exiftoolは標準入力で複数のファイルを受け入れますか? –