0

我正在尝试截取屏幕截图,然后在该屏幕截图上运行命令而不保存到磁盘。

我要运行的实际命令是visgrep image.png pattern.pat

visgrep必须有两个参数:图像文件和 .pat 文件。

这是我到目前为止所拥有的。

p = subprocess.Popen(['import', '-crop', '305x42+1328+281', '-window', 'root', '-depth', '8', 'png:' ], stdout=subprocess.PIPE,)
cmd = ['visgrep']
subprocess.call(cmd, stdin=p.stdout)

显然这失败了,因为 visgrep 必须有两个参数。

visgrep image.png pattern.pat那么,除了用 ImageMagick 的输出替换 'image.png' 之外,我还能做些import什么呢?

我需要使用 xargs 吗?有没有更好的方法来完成我正在尝试的事情?

4

3 回答 3

0

ImageMagick 文档

STDIN、STDOUT 和文件描述符

Unix 和 Windows 允许将一个命令的输出通过管道传输到另一个命令的输入。ImageMagick 允许使用伪文件名 - 分别从标准流 STDIN(标准输入)和 STDOUT(标准输出)读取和写入图像数据。在此示例中,我们将 convert 的输出通过管道传输到显示程序:

$ convert logo: gif:- | display gif:-

第二种显式格式“gif:”在前面的示例中是可选的。GIF 图像格式在图像中具有唯一的签名,因此 ImageMagick 的显示命令可以轻松地将格式识别为 GIF。转换程序也以这种方式接受 STDIN 作为输入:

$convert rose: gif:- | convert - -resize "200%" bigrose.jpg

您可以对命令使用相同的文件名约定import

所以,试试:

p = subprocess.Popen(['import', '-crop', '305x42+1328+281', 
                      '-window', 'root', '-depth', '8', 'png:-' ], 
                      stdout=subprocess.PIPE,)
于 2013-01-15T17:02:40.913 回答
0

根据这个答案,将参数更改png:png:-将导致导入命令输出到标准输出而不是文件。我不熟悉 visgrep,所以我不知道如何告诉它从标准输入读取源图像。

于 2013-01-15T16:37:50.160 回答
0

在 linux 中,您可以将/dev/stdin其用作文件名,但并非始终有效。如果它不适用于visgrep,您必须使用临时文件(这并不可惜)。

PS。不png: 应该png:-吗?

于 2013-01-15T16:41:23.080 回答