2012-09-27 57 views
1

我在运行另一个php文件时遇到问题。我希望我的php params是运行一个调用另一个文件本身的python文件的输出。从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文件。

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

回答

3

更改exec来:

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

或者检查Web服务器或PHP错误日志。这会将python脚本的错误输出返回到你的php脚本(通常不是你想要的产品)。

+0

哦,我有进口os抱歉。你的意思是“2>&1”会将错误返回给我的PHP吧?所以当我加载php时,我得到了这个错误:Traceback(最近调用最后一个):文件f = open(IOError:[Errno 13] Permission denied:'tmp.txt')。 – Sheerberenj

+2

权限被拒绝是因为PHP作为一个用户运行(可能是'apache'),并且该文件夹是由另一个用户(可能是你)拥有的。您将需要授予Apache文件夹的写入权限。 – h0tw1r3

+0

那么事情是它甚至不创建tmp.txt,所以这就是为什么它不能从test.py – Sheerberenj