为什么阿尔弗雷德(Alfred)工作流程无法获得shell_exec(php函数)输出?

时间:2019-04-26 11:59:06

标签: php screenshot clipboard shell-exec alfred

我想做的是使用PHP从剪贴板中抓取图像并将其保存到图像文件中,不幸的是,PHP无法做到这一点,因此我在Mac上安装了pngpaste并使用php函数{ {1}} / shell_exec() / exec()执行popen()命令来完成这项工作。

首先,我在Mac上安装了pngpaste

pngpaste

然后,我尝试将图像复制或将屏幕快照截图到剪贴板,然后运行以下命令:

brew install pngpaste

工作正常! pngpaste ./screenshot.png 成功生成。

然后,我尝试将一些纯文本复制到剪贴板(这意味着剪贴板中不再有图像),然后再次运行上面的命令,它返回如下图所示(这是正确的输出,原因是剪贴板中没有图像): enter image description here

然后我尝试通过PHP执行上述命令,创建screenshot.pngindex.php中的代码非常简单:

index.php

然后我跑:

<?php
    $command = '/usr/local/bin/pngpaste ./screenshot.png';
    $output = shell_exec($command);

    echo $output;

它也可以正常工作,如果我将截图截屏到剪贴板,也将创建php index.php ,并且如果剪贴板中没有图像,它将直接返回一些单词作为运行命令。

enter image description here

一切看起来不错,现在我将使用screenshot.png。我创建了一个工作流程: enter image description here

然后双击Alfred并将命令放入框中→单击Run Scriptenter image description here

如您所见,我将工作流程快捷方式设置为save,这意味着当我按下control+command+v时,以下命令将由Alfred执行:

control+command+v

然后我将屏幕快照复制到剪贴板,然后按快捷键/usr/local/bin/php /Users/bruce/Downloads/index.php ,猜猜会发生什么?对!再次创建control+command+v,它也可以正常工作。

然后,当剪贴板中没有图像时,我尝试按screenshot.png,应该返回control+command+v,对吗?但是,猜猜是什么,什么也没有,我无法得到pngpaste: No image data found on the clipboard, or could not convert!返回的$output,此后,我尝试了shell_exec() / exec(),但是相同,没有输出。

我试图编辑这样的代码,然后按快捷键popen()

control+command+v

Alfred返回了<?php $command = '/usr/local/bin/pngpaste ./screenshot.jpeg'; $output = shell_exec($command); $output = 'this is a test ouput' . output; echo $output; ,这意味着变量this is a test ouput$outputNULL,但它不能为空,在以下情况下应返回empty string剪贴板中没有图像。

所以,我的问题是:如何解决这个问题?剪贴板中没有图像时,如何获取由pngpaste: No image data found on the clipboard, or could not convert!返回的输出?

0 个答案:

没有答案