从PHP脚本调用Python脚本时,不会通过PHP调用创建在控制台运行时创建的临时文件

时间:2009-05-28 23:21:44

标签: php python linux

情景:

我有一个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的正则表达式搜索特定标题并将标题输出到标准输出,并将其写入文件。

这个python脚本中有一些例程可以执行,因此我将pr​​int语句调试。我注意到PHP页面中只有一些初始打印语句的输出,所有来自实际执行某些操作的函数都没有看到。

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

我希望我能够充分详细地捕获问题陈述,并且有人能够在最后重现这个问题。如果我自己在这个上取得任何进展,我会诠释这个问题。谢谢大家。

拉​​夫

3 个答案:

答案 0 :(得分:2)

我打赌你的py脚本有一些错误,当它从PHP内部调用时它会破坏它。 尝试

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

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

答案 1 :(得分:1)

很可能出现权限问题

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

  1. 该文件归apache
  2. 所有
  3. 该文件位于组apache和组可写
  4. 该文件是世界可写的
  5. 这是多用户计算机上的“粘性”问题,因为不同的人可以访问Apache。

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


    <强>考虑:

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

答案 2 :(得分:0)

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