读取Python中imagemagick子进程的输出[复制]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取Python中imagemagick子进程的输出[复制]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我想在python中获得文件的平均亮度。阅读了上一个问题[Problem getting terminal output from ImageMagick's compare.exe ( Either by pipe or Python )我想出了:
cmd='/usr/bin/convert {} -format "%[fx:100*image.mean]
" info: > bright.txt'.format(full)
subprocess.call(cmd,shell=True)
with open('bright.txt', 'r') as myfile:
x=myfile.read().replace('
', '')
return x
上一个问题建议使用'pythonmagick',我可以找到但没有当前的文档和最近的活动。我无法弄清楚使用它的语法。
我知道我的代码不能令人满意,但确实有效。有没有更好的方法,不需要'shell = true'或额外的文件处理?
您可以改进子流程,并使用Popen
+ PIPE
删除临时文本文件。
cmd=['/usr/bin/convert',
full,
'-format',
'%[fx:100*image.mean]',
'info:']
pid = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = pid.communicate()
return float(out)
ImageMagick还附带identify
实用程序。用...可以实现相同的方法
cmd=['/usr/bin/identify', '-format', '%[fx:100*image.mean]', full]
如果值得直接使用ImageMagick的共享库,那么值得探索。通常通过C-API(pythonmagick,wand,&etc)连接。对于您的操作,这只会增加代码复杂性,增加模块依赖性,但绝不会提高性能或准确性。
这似乎对我来说可以将均值作为可以打印的变量返回。 (这有点错误。看到底部附近的修正)
#!/opt/local/bin/python3.6
import subprocess
cmd = '/usr/local/bin/convert lena.jpg -format "%[fx:100*mean]" info:'
mean=subprocess.call(cmd, shell=True)
print (mean)
结果是70.67860,返回终端。
如果您解析命令的每个部分,这也适用于shell = False。
#!/opt/local/bin/python3.6
import subprocess
cmd = ['/usr/local/bin/convert','lena.jpg','-format','%[fx:100*mean]','info:']
mean=subprocess.call(cmd, shell=False)
print (mean)
结果是70.67860,返回终端。
来自下面的tripleee
的评论表明我的上述过程不正确,因为平均值显示在终端,但实际上没有放入变量。
他建议使用subprocess.check_output()
。以下是他的解决方案。 (谢谢你,tripleee)
#!/opt/local/bin/python3.6
import subprocess
filename = 'lena.jpg'
mean=subprocess.check_output(
['/usr/local/bin/convert',
filename,
'-format',
'mean=%[fx:100*mean]',
'info:'], universal_newlines=True)
print (mean)
印刷品:mean=70.6786
以上是关于读取Python中imagemagick子进程的输出[复制]的主要内容,如果未能解决你的问题,请参考以下文章
Imagemagick / Shell /子进程NodeJS