2016-06-21 2 views
0

私はtempfileモジュールを使用してimagemagickと私はこのコードを実行しようとしています:Python - tempfileモジュールが開くことができないファイルを作成しますか?

width = height = 100 
temp_file = tempfile.NamedTemporaryFile() 
canvas = "convert -size {}x{} canvas:black {}/canvas.png".format(scale_width, scale_height, temp_file.name) 
os.system(canvas) 

を私は次のエラーを取得する:

convert: unable to open image /var/folders/jn/phqf2ygs0wlgflgfvvv0ctbw0009tb/T/tmpeMcIuh/canvas.png': Not a directory @ error/blob.c/OpenBlob/2705. convert: WriteBlob Failed /var/folders/jn/phqf2ygs0wlgflgfvvv0ctbw0009tb/T/tmpeMcIuh/canvas.png' @ error/png.c/MagickPNGErrorHandler/1630.

問題がある可能性がありますか? ランダムに生成された一時ファイルに格納された黒い画像(解像度100x100)を作成しようとしています。

ありがとうございます!

+1

http://stackoverflow.com/questions/30105904/python-subprocess-pipe-an-image-blob-to-imagemagick-shell-command/30109768#30109768 –

+0

@PadraicCunningham私はそれについて言及することも考えましたが、 OPは明示的に "ランダムに生成された一時ファイル"と述べています。 –

答えて

1

ビットは/canvas.pngのままにする必要があります。 tempfile.NamedTemporaryFile()によって作成された一時ファイルは/var/folders/jn/phqf2ygs0wlgflgfvvv0ctbw0009tb/T/tmpeMcIuhでした。したがって、出力ファイルの親ディレクトリとして使用すると、imagemagickによるエラーが発生します。

は、ファイル名の拡張子によって、PNG出力形式を指定するには、一時ファイルが suffixキーワード引数を使用して作成することができます。

temp_file = tempfile.NamedTemporaryFile(suffix='.png') 

また、あなたがサブプロセスを実行するためにsubprocessモジュールを使用する必要があります。そのようにして、サブプロセスの引数を渡すためにコマンド全体を文字列書式設定する必要はありません。

subprocess.check_call(['convert', 
         '-size', '{}x{}'.format(scale_width, scale_height), 
         'canvas:black', 
         temp_file.name]) 

、別の発言:NamedTemporaryFile()あなたはすぐに閉じなければならないファイルディスクリプタを開きます。ドキュメントには、ファイルの削除を再度担当することも記載されています。

+0

しかし、どのようにimagemagickに、その場所にある特定の方法で名前が付けられた.pngファイルが必要なのでしょうか? – Gambit2007

+0

'NamedTemporaryFile()'は 'suffix'キーワード引数を持ちます。それに応じて編集された回答。 –

+0

偉大なそれは多くの感謝を働いた! – Gambit2007

関連する問題