Python - tempfile 模块创建了一个无法打开的文件?
Python - tempfile module creates a file that cannot be opened?
我正在使用 tempfile
模块和 imagemagick
,当我尝试 运行 此代码时:
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)。
谢谢!
你必须离开 /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()
打开了一个文件描述符,您应该立即将其关闭。文档还声明您负责再次删除该文件。
我正在使用 tempfile
模块和 imagemagick
,当我尝试 运行 此代码时:
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)。
谢谢!
你必须离开 /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()
打开了一个文件描述符,您应该立即将其关闭。文档还声明您负责再次删除该文件。