我有一個命令行實用程序(exiftool),它通過stdin接受輸入。重複命令與子進程.Popen
蟒蛇稱它可能是這樣的:
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(與貓不同)似乎將其輸入解釋爲整個塊,而不是逐行或根據某個分隔符。但也許這可能通過黑客exiftool進程的stdin?
看來exiftool不僅是一個命令行工具,它也是一個perl庫。你也許可以編寫一個等待程序輸入並直接調用庫函數的perl腳本。 – Gribouillis
或者,使用Python exif庫而不是分出 –
exiftool是否接受其stdin上的多個文件? –