未执行来自PHP的命令行调用

未执行来自PHP的命令行调用,php,command-line-interface,Php,Command Line Interface,我想从运行在Web服务器上的php脚本启动一个python应用程序。 到目前为止,一切顺利。我试过了 passthru("python track.py"); 但它不起作用。根本没发生什么事。我也尝试了exec()和system(),只是为了确定。 然后,我尝试使用以下命令运行php脚本: passthru("php test.php"); passthru("/usr/bin/php test.php") 还是什么都没发生。但是 passthru("ls") 一切正常 我设置了每个用户

我想从运行在Web服务器上的php脚本启动一个python应用程序。 到目前为止,一切顺利。我试过了

passthru("python track.py"); 
但它不起作用。根本没发生什么事。我也尝试了exec()和system(),只是为了确定。 然后,我尝试使用以下命令运行php脚本:

passthru("php test.php");
passthru("/usr/bin/php test.php")
还是什么都没发生。但是

passthru("ls")
一切正常


我设置了每个用户都可以编辑和运行文件的权限。

这听起来像是Web服务器用户无法读取相关文件的情况

不幸的是,如果命令失败,
passthru()
只返回
NULL
,而不是抛出异常。例如,甚至像
var_dump(passthru('foobar'))这样的废话返回
NULL

你怎么解决这个问题?您可以从命令行测试Web服务器是否能够执行该命令(假设
www-data
是您的Web服务器用户,并且您具有sudo权限):


这样,您将得到一条有意义的错误消息,并可以解决问题。

passthru(“/path/to/python/some/path/to/track.py”)也不起作用:(webserver用户是守护进程(只需安装xampp即可启动并运行)。当我执行您给我的命令时,我得到一个错误
此帐户当前不可用。
。之后,我关闭了xampp,因为我认为它可能会阻塞,但相同的错误一再出现。这通常意味着守护程序用户没有真正的shell,而是类似于
/bin/false
/usr/sbin/nologin
。您可以使用
grep^daemon/etc/passwd
(最后一列)进行检查。要设置不同的shell,如bash,请运行
sudo usermod-s/bin/bash daemon
,然后重试上述操作。(注意:从安全角度来看,不允许守护程序用户使用交互式shell是有意义的,但如果您想使用
passthru
,则必须这样做。)顺便说一句,你不需要为此关闭XAMPP。谢谢。现在它启动python脚本,但我遇到了一个奇怪的错误。
/usr/lib/python2.7/dist-packages/IPython/utils/path.py:304:UserWarning:IPython-parent'/usr/sbin'不是一个可写的位置,使用临时目录。
我不确定是否应该打开一个新线程,因为它看起来很像比如权限问题。也许你也可以帮我:)是的,这看起来像是权限问题。脚本可能应该主动设置一个工作目录(不应该是启动脚本的目录)。无论如何,这应该是一个不同的问题。
sudo su - www-data -c 'python track.py'