2012-09-27 98 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