我正在尝试通过 SSH 在 Raspberry Pi 上执行命令,并在 Windows 计算机上的 PHP 脚本中获取结果。目前我可以在 RasPi 上执行该命令,但我没有将任何结果返回到 PHP 脚本中。
我为此使用的代码:
<?php
$cmd = "C:\\path_to_putty\\putty.exe -ssh pi@RasPiIP -pw raspberry -m C:\\path_to_test.txt\\test.txt";
$result = shell_exec($cmd);
echo $result;
?>
为了向我的 RasPi 发送命令,代码可以工作。我已经通过将
test.txt
更改为 sudo reboot
进行了多次测试,并且它按预期工作。
我正在使用 PuTTY 将命令(test.txt
当前是 nfc-list,它返回连接的扫描仪等在这里并不重要)发送到 RasPi。
我想要实现的是
$result
包含执行我的命令时返回的数据。
有可能做到这一点吗?如果是的话如何(任何帮助表示赞赏)。如果不是,他们是否有其他方法来解决这个问题?
解决可能的重复问题:我正在使用一台 Windows 计算机,并且我正在尝试获取(一个命令的)结果以在我的 PHP 脚本中重用。在另一个问题中,用户尝试保存完整的控制台日志并将其保存到另一个文件。
首先,不要使用PuTTY。 PuTTY 是一个用于交互式使用的 GUI 应用程序。使用 Plink,它是相当于 PuTTY 的命令行/控制台,用于命令自动化。作为一个控制台应用程序,它有一个标准输出,可以用 PHP 读取(PuTTY 作为 GUI 应用程序没有标准输出)。
使用 Plink,您还可以在 Plink 命令行上指定命令,因此不需要创建
test.txt
命令文件。
无论如何,都没有办法让 PuTTY 或 Plink 仅分离命令的输出(至少不能从命令行分离)。
但是你可以做的是打印一些标题/尾部来区分命令输出的开始和结束,例如:
plink.exe -ssh pi@RasPiIP -pw raspberry "echo start-of-command && command && echo end-of-command"
然后在 PHP 中,您可以查找
start-of-command
和 end-of-command
来识别 Plink 输出的哪一部分真正是命令输出。
无论如何,您最好使用 PHP SSH 库来实现您想要的,而不是驱动外部应用程序。例如 phpseclib。但这是一个完全不同的问题。