python - 从 Python 中的 imagemagick 子进程读取输出

标签 python subprocess 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]\n" info: >    bright.txt'.format(full)
subprocess.call(cmd,shell=True)
with open('bright.txt', 'r') as myfile:
    x=myfile.read().replace('\n', '')
return x

上一个问题建议使用“pythonmagick”,我可以找到它,但没有当前文档,最近的事件也很少。我无法弄清楚使用它的语法。

我知道我的代码不能令人满意,但它确实有效。 有没有更好的方法不需要 'shell=true' 或额外的文件处理?

最佳答案

这似乎对我有用,可以将平均值作为可以打印的变量返回。 (这有点错误。请参阅底部附近的更正)

#!/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()。以下是他的解决方案。 (谢谢你,三人组)

#!/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 - 从 Python 中的 imagemagick 子进程读取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52372489/

相关文章:

python - python 的子进程问题,popen(创建僵尸并卡住)

python - Supervisord 进程控制 - 停止单个子进程

linux - 有没有办法制作自动更正扫描文档的脚本?

c++ - 如何在没有 ImageMagick 的情况下将 ImageMagick 图像导入 Qt5 应用程序?

python - 反转列表的顺序,然后按字典顺序排序

Python:获取列表中出现次数最多的项目

python - 为什么 subprocess.Popen 的输出与预期的不一样?

go - 如何使用 API 平滑地栅格化 PDF?

python - 在 Windows 上使用 Shutil.copyfile() 时出现 IOError

Python/Selenium 尝试在未找到的元素上使用 "if"语句