我正在try 使用以下命令从PHP运行Python脚本:

exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');

然而,PHP根本不产生任何输出.错误报告设置为E_ALL,并且"显示错误"处于启用状态.

以下是我try 过的:

  • 我用python2/usr/bin/python2python2.7代替/usr/bin/python2.7
  • 我还使用了相对路径而不是绝对路径,这也没有改变任何事情.
  • 我试着使用命令execshell_execsystem.

然而,如果我跑

if (exec('echo TEST') == 'TEST')
{
    echo 'exec works!';
}

它工作得很好,而shutdown now什么也做不了.

PHP具有访问和执行该文件的权限.

编辑:多亏了亚历杭德罗,我才得以解决这个问题.如果您有同样的问题,不要忘记您的Web服务器可能/希望不是以root用户身份运行.Try logging in as your webserver's user or a user with similar permissions and try to run the commands yourself.

推荐答案

在Ubuntu服务器10.04上测试.我希望它对Arch Linux也有帮助.

在PHP use shell_exec function中:

通过shell执行命令,并以字符串形式返回完整输出.

它返回已执行命令的输出,如果出现错误,则返回NULL

<?php 

$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;

?>

在Python文件test.py中,验证第一行中的文本:(see shebang explain):

#!/usr/bin/env python

如果您安装了多个版本的Python,/usr/bin/env将 确保使用的解释器是您环境中的第一个解释器 $PATH.另一种方法是硬编码类似于 #!/usr/bin/python;还可以,但灵活性较差.

在Unix中,要解释的可执行文件可以指示

当然,如果你说的是其他平台,这条规则并不适用

这适用于在Unix中通过使其可执行来运行它

make executable a file on unix-type platforms:

chmod +x myscript.py

还有Python文件must have correct privileges(如果PHP脚本在浏览器或curl中运行,则针对用户www data/apache执行)

拍摄from php manual张:

这只是一个简短的提醒,提醒那些试图使用shell_exec的用户

Php相关问答推荐

Postgrid Webhook不叫laravel

在Laravel中为表添加前缀,以将它们逻辑地分组

Laravel Nova不使用数组键作为筛选器中的选项值

针对给定产品类别的WooCommerce计数审核

函数存储到变量中

PHP SimpleXML:按属性值访问 node

WooCommerce中特定付款方式的变更订单预留库存时间

用ajax获取文件 - CORS问题&;设置缓存?

如何在自定义邮箱内容中获取WooCommerce订单项目的详细信息?

如何在laravel中获得两个时间戳之间的小时和分钟差异

在 PHP MySQL 中自动生成账单编号

AWS S3:当对象名称包含 % 时复制对象失败并出现错误 - 无效的复制源编码

如何更新 Laravel Eloquent 列强制转换为集合

使用 foreach php 将记录正确分配给正确的父级

在 mysql 上的 PDO 中启用自动提交并将自动提交设置为关闭

Laravel 路由参数中的 ":" 是什么?

Laravel的Storage::exists返回false,而file_exists返回true.

docker |管道失败的 ubuntu 源列表

在 EasyAdmin 中添加全局操作,将我的按钮放在表格下方而不是上方

PHP路由不重定向