1

我从 php.ini 运行另一个文件时遇到问题。我希望我的 php 参数是运行一个调用另一个文件本身的 python 文件的输出。

这是我的 php 文件:

<?php
    if (isset($_POST['submit'])) {
    $params = solve();
}

function solve() {
  exec("python array.py", $output);
  return $output;
}
?>

如果 array.py 很简单:

if __name__ == "__main__":
    print 1
    print 2
    print 3
    print 4

我的输出将得到 1,2,3,4,但是一旦我将 array.py 更改为以下调用 os.system 的文件,我什么也得不到。所以新的array.py是:

import os

def main():
    os.system("python test.py") #test.py creates tmp.txt with 4 lines w/ values 1,2,3,4


def output():
    f = open("tmp.txt", "r")
    myReturn = []
    currentline = f.readline()

    while currentline:
          val = currentline[:-1]  #Getting rid of '\n'
          val = int(val)
          myReturn = myReturn + [val]
          currentline = f.readline()
    f.close()
    return myReturn


if __name__ == "__main__":
     main()
     o = output()
     print o[0]
     print o[1]
     print o[2]
     print o[3]

另外,如果我只运行 test.py,则输出是文件 tmp.txt:

 1
 2
 3
 4

所以现在,当我运行我的 php 文件时,输出 tmp.txt 甚至没有在目录中创建,因此我也没有从我的 php 中获得任何输出。我不确定为什么会发生这种情况,因为当我自己运行 array.py 时,我得到了所需的输出,并创建了 tmp 文件。

编辑:我忘了包括:上面的导入操作系统。

4

1 回答 1

4

将执行更改为:

exec("python array.py 2>&1", $output)

或者检查 web 服务器或 php 错误日志。这会将 python 脚本的错误输出返回到您的 php 脚本(通常不是您在生产中想要的)。

于 2012-09-27T14:40:15.300 回答