【问题标题】:When calling a Python script from a PHP script, temporary file that is created on a console run, is not created via the PHP invocation从 PHP 脚本调用 Python 脚本时,在控制台运行时创建的临时文件不是通过 PHP 调用创建的
【发布时间】:2009-05-28 23:21:44
【问题描述】:

场景:

我有一个 php 页面,我在其中调用了一个 python 脚本。

在命令行 (Linux) 上运行的 Python 脚本在命令行上显示输出,并将输出写入文件。

通过 php 运行 Python 脚本时,也不这样做。

阐述:

我在 PHP 中使用一个简单的系统命令来运行 python 脚本:

/var/www/html/1.php: system('/usr/python/bin/python3 ../cgi-bin/tabular.py 1');

/var/www/cgi-bin/tabular.py --这个python文件基本上是解析一个数据文件,使用python的正则表达式搜索特定的标题并将标题输出到stdout,以及写入文件。

这个 python 脚本有一些执行的例程,所以我把打印语句用于调试。我注意到 PHP 页面中只有一些初始打印语句的输出,而实际上执行某些操作的函数中的所有输出都没有看到。

另外,作为我测试的一部分,我认为 py 脚本位于不同的文件夹中,所以让我将其更改为 /var/www/html 文件夹,不行。

我希望我捕获了足够详细的问题陈述,并且有人能够在他们的最后重现此问题。如果我自己在这方面取得任何进展,我会注释这个问题。谢谢大家。

高拉夫

【问题讨论】:

    标签: php python linux


    【解决方案1】:

    我敢打赌,你的 py 脚本有一些错误,当从 PHP 内部调用它时会导致它崩溃。 试试

    passthru('/usr/python/bin/python3 ../cgi-bin/tabular.py 1 2>&1');
    

    进行调查(注意 2>&1 会导致 stderr 被写入 stdout)。

    【讨论】:

    • 谢谢霸主。根据您的建议,当我重定向输出时,我找到了根本原因 - 我的 globalvariables.py 脚本中数据文件的相对路径未正确解析 - 我提供了完整路径,这解决了问题。
    【解决方案2】:

    权限问题很可能是这种情况。

    如果 apache 以 apache 运行,那么它将无权写入文件,除非

    1. 文件归apache所有
    2. 文件在组apache中,组可写
    3. 文件是全局可写的

    这是多用户计算机上的“棘手”问题,因为不同的人可以访问 Apache。

    在文件上尝试chmod 666 output.txt,然后重新运行测试。


    注意事项:

    1. 让 python 脚本将输出写入数据库
    2. 使用 PHP 的 popen 功能打开进程并通过管道进行通信
    3. 使用 PHP 的正则表达式重写
    4. 将输出文件写入 /tmp,然后在 python 脚本完成后立即使用 PHP 读取结果。
    5. 等等...

    【讨论】:

      【解决方案3】:

      检查运行 python 脚本的用户是否在 CWD 中具有写入权限。另外,尝试使用 shell_exec() 或 passthru() 来调用脚本,而不是 system()。

      【讨论】:

      • 嗨,TML,通过 passthru,观察到相同的结果。此外,已在 /var/www/cgi-bin 中的所有 .py 文件中执行了 chmod 755 感谢您的回复,我将继续解决这个问题,因为 .py 中的 print 输出应该在 .py 中可见。 php页面。
      • 问题出在输出目录的写权限上,与脚本的写权限无关。
      猜你喜欢
      • 2012-04-20
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2023-03-31
      • 1970-01-01
      • 2016-11-25
      • 2017-05-30
      相关资源
      最近更新 更多