【问题标题】:php called python scriptphp调用python脚本
【发布时间】:2011-12-06 13:05:23
【问题描述】:

我的 python 脚本有问题。脚本本身会生成一个字符串并将其写入文件的末尾。这在我直接调用 python 脚本时效果很好。

但是一旦我用 exec() 从 PHP 调用 python 脚本,它就不能再写入文件了。

在python中我只是使用:

try:
    FILE = open(filename,"w")
    FILE.write(mystring)
except IOError:
    print 'cannot open', filename

PHP 像这样调用 python 脚本:

$command = 'python myscript.py input1 input2 > /dev/null &';
exec($command, $stdout, $error);

有谁知道如何解决这个问题?

【问题讨论】:

  • 也许运行您的 PHP 脚本的进程与您的本地用户具有不同的权限?
  • PHP进程的权限设置是否正确?
  • 您是否尝试过设置目标文件的权限,以便它是开放的并且可以在世界范围内写入?
  • 写完后你会关闭文件吗?与上下文管理器一起使用
  • 您确定命令正在运行吗?考虑一下systempassthru 函数,它们允许您获取返回码或程序输出。

标签: php python file-io fwrite


【解决方案1】:

无法写入文件

您收到什么错误消息? 我注意到您在 Python 脚本中使用直接打印到标准输出报告错误,并在运行时将标准输出重定向到 /dev/null。 stderror 字符串是 IOError 异常的有用部分。 您可以将您的 except 更改为以下内容:

except IOError, err:
    sys.stderr.write("Could not open "+ err.filename + ": " + err.strerror + "\n")   

或者您可以使用 stdout 并将输出重定向到真实文件而不是 /dev/null - 至少在您解决问题之前。

【讨论】:

    【解决方案2】:

    filename 是相对路径还是绝对路径?我建议使用绝对路径,这样你的脚本就可以工作,无论它被称为 - 例如"/home/matt/scripts/python/test.txt" 是一个绝对路径。

    这是由其他脚本调用的脚本,或由系统事件或 cronjobs 等调用的脚本的常见错误。

    希望有帮助

    【讨论】:

    • 我尝试了相对路径和绝对路径。两者都没有工作。 :(
    【解决方案3】:

    您可以在 PHP 手册中找到一个系统函数:http://php.net/manual/en/function.system.php

    $var = system('python sample.py myargs', $ref);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多