如何在Laravel中运行Python脚本?

7

我想知道如何使用php代码运行python脚本。我尝试了不同的选项,比如

 $output = exec("python  /var/GAAutomationScript.py");

 $command = escapeshellcmd('/var/GAAutomationScript.py');
 $output = shell_exec($command);

但是无法运行Python脚本。我的应用程序使用Laravel开发。是否可以使用Laravel计划任务来运行Python脚本,例如使用artisan命令?


Python脚本是否可由运行Web服务器的帐户执行? - aynber
这个主题在这里有非常详细的回答: https://dev59.com/mlgR5IYBdhLWcg3wr-4Y - Adi Bnaya
你有收到任何错误吗? - ron
1个回答

3
关于你的问题有几点需要注意:
  • 我强烈建议使用 symfony/process 而不是直接使用 shell_exec。它已经在 Laravel 中可用。您可以轻松检查您的命令是否成功,以字符串格式获取标准输出等。
  • 当您从 Web 应用程序运行 shell 脚本时,用户权限很重要。例如,Laravel Web 用户是 www-data,您的 Python 脚本是例如 ubuntu.nbody,那么它将检查 Python 脚本具有哪些权限。除了此示例中的 ubuntu 用户之外的其他用户是否允许运行它。
  • 然后,如果您认为给予 Python 脚本 777 权限���以消除权限问题,则这也是一种风险。
  • 最后但并非最不重要的是,创建一个 Laravel 控制台命令,添加代码片段来使用 symfony/process 运行 Python 脚本。然后运行并调试错误。一旦它正常工作,您可以将其添加到 Laravel 的 cron jon 中。

请参阅此文档 以了解有关调度 Artisan 命令的更多信息。

您还可以避免创建 Artisan 命令并直接添加 shell,因为它在内部使用了 symfony/process。请参阅此文档 了解相关参考。


嗨,当我尝试在我的Python代码中导入外部扩展时,出现了一个模块未找到的错误,即使该Python代码可以通过终端运行。你有什么解决方案吗? - Forrest
@Forrest 你确定你在laravel应用程序中使用的是与本地工作的完全相同的命令吗?你能否提供更多信息以便于检查错误? - Mihir Bhende
嗨,我的问题已经解决了。实际上我必须使用绝对路径导入它。谢谢。 - Forrest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接