PHP exec()命令不会使用sendkeys启动python脚本

时间:2011-09-11 02:20:20

标签: php python windows apache exec

首先注意:抱歉这很长。想要彻底。 我真的很想在网上有这么多问题的时候问一个问题,但这已经过了一周的搜索,我没有什么可以展示的。我真的很感激一些帮助。我是一个菜鸟,但我学得很快,而且非常愿意尝试其他语言或其他任何可能的语言。

目标: 我想要做的是在php页面中按下按钮后,通过键盘快捷键(例如:空格键暂停)构建一个Netflix遥控器(仅供个人使用)控制服务器上的Netflix(Windows 7 PC 32位)在我的iPod touch或Android手机上。目前,遥控器使用USBUIRT来控制电视和红外设备而不会出现问题。如果您有任何替代方法(我可以构建,而不是购买)建议或我可以学习的其他语言,我很乐意学习。

问题: PHP的exec()和system()命令不会启动python脚本(也不是用py2exe编译的exe),只需按下Windows键(用于按下服务器上的键,而不是加载php页面的机器)。我可以使用USBUIRT的UUTX.exe与exec()传递参数来控制IR设备而不会出现问题。但我的exe,py,pyw文件都有效。我甚至尝试调用批处理文件,然后启动python脚本,该批处理将无法启动。页面刷新并且不显示任何错误。

尝试: 这是一个有效的代码

$exec = exec("c:\\USBUIRT\\UUTX.exe -r3 -fC:\\USBUIRT\\Pronto.txt LED_Off", $results);

以下是一些不起作用的尝试

$exec = exec("c:\\USBUIRT\\test.py", $results);

$exec = exec("python c:\\USBUIRT\\test.py", $results);

$exec = exec("C:\\python25\\python.exe c:\\USBUIRT\\test.py", $results);

我尝试过的所有这些都没有双反斜杠和正斜杠和双正斜杠。我没有将它传递给变量$ exec,这没有任何区别。 $结果输出 Arraystring(9)“

将exec()中的所有内容复制到命令行中可以正常工作。我已经尝试将文件移动到htdocs文件夹,更改了文件夹权限,并确保我不在php中的安全模式。 Var_dump返回:Array“使用foreach循环不会从数组中提供任何信息。 我的Apache日志只显示

[Sat Sep 10 19:54:09 2011] [error] [client 127.0.0.1] File does not exist: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/announce

设置: Apache 2.2,python 2.5和php 5.3。在Windows 7上运行此命令,仅在本地网络上连接,没有vpn等。给定每个相关文件夹(python,htdocs,cmd.exe文件,usbuirt文件夹)IUSR,管理员,用户以及完全控制的每个人只需进行初始测试(以后我当然会加强安全性)。安全模式也在PHP上关闭。

注意:我在其他类似问题上看到的这段代码不起作用:

exec("ping google.com -n 1");

error.log和事件查看器中没有错误。把它放在ob_start()中;并使用ob_get_clean()获取结果;绝对没有给我什么。没有文字或任何东西。我已经尝试了很多,但我已经在这里写了一本小说,所以我只需要回答其余部分。如果需要,我会发布完整的php源代码或python脚本,但它只是导入sendkeys并按下windows键弹出开始菜单作为基本的可视化测试。我不知道它的权限,我的设置运行方式,我的编码......我只是不知道了。我再次道歉这是如此之久,如果你回答,我真的很感谢你花时间阅读所有这些来帮助一个完全陌生的人。

2 个答案:

答案 0 :(得分:2)

运行脚本的PHP服务器很可能作为与GUI控制台中登录的帐户不同的用户(网络服务)运行。我认为这种设置可能在XP下工作,和/或在服务上启用“交互”字段。但是,我相信Vista / 7会在security grounds上被阻止。因为我现在在Linux机箱前面,所以细节有点模糊。

解决方案是在运行netflix的会话中手动运行php,然后重试。如果这不起作用,我曾经在python中编写了一个简单的客户端/服务器,它接受键命令并将它们转换为击键。很容易做到。

答案 1 :(得分:0)

得益于Winston Ewert和Gringo Suave的出色帮助。

我将Apache的服务设置为本地系统帐户,并授予其与桌面交互的权限。如果您使用的是Windows XP或Server 2003,这应该会有所帮助,但是当您尝试从php启动GUI应用程序时,Vista和更新版本会出现一个交互式服务检测。每个命令都正确执行,但在第0节中这样做。这是因为Apache作为服务安装。对于大多数人来说,我认为重新安装而不将Apache设置为服务会起作用,但我还是考虑转移到XAMPP,所以必须卸载Apache才能推动我的决定。

最终,我在原帖中写的所有代码现在都可以作为结果,我的项目可以继续前进。我希望其他人偶然发现这一点并得到Winston Ewert和Gringo Suave的帮助!非常感谢你们!

相关问题