2015-01-02 38 views
0

我想從PHP執行python,我確實有一個腳本,對於默認的python解釋器工作正常。我有安裝在/ usr/bin/python和安裝在/usr/local/bin/python2.7的python 2.7.3的默認python 2.6.6的centos。你可以看到什麼是默認的python版本:從PHP執行Python - 選擇Python版本(Linux - CentOS)

[[email protected] ~]# python -V 
Python 2.6.6 

[[email protected] ~]# python2.7 -V 
Python 2.7.3 

現在我想調用一個簡單的python腳本從PHP。它應該在python 2.7.3中執行,而不是在python 2.6.6中執行。但我只設法使用默認版本的python。

PHP(test.php的):

<?php 
ini_set('display_errors', 'on'); 
$output = array(); 
$dir = dirname(__FILE__); 
$command = "/usr/bin/python ". $dir . "/test.py"; 
$command1 = "/usr/local/lib/python2.7/ ". $dir . "/test.py"; 
$output = null; 
exec($command, $output); 
var_dump($output); 
?> 

的Python(test.py):

#!/usr/bin/env/python2.7 
import sys 
print(sys.version) 

OUTPUT(一旦我運行的瀏覽器test.php的):

array(2) { [0]=> string(41) "2.6.6 (r266:84292, Jan 22 2014, 09:42:36)" [1]=> 
string(38) "[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]" } 

所以,當我使用:

exec($command, $output); 

一切都很好,它顯示了蟒蛇的正確版本(2.6.6)

然而,當我運行test.php的有:

exec($command1, $output); 

我得到這些結果(無結果):

array(0) { } 

因此,沒有結果,所以我想知道是否ËPython看到在所有的安裝2.7.3

從命令行2.7.3可用 - 例如:

[[email protected] ~]# python2.7 
Python 2.7.3 (default, Jan 2 2015, 00:56:13) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "it works" 
it works 

那麼,如何解決這個問題?

編輯:

The result of whereis -b python :python: 

/usr/bin/python /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6 
/usr/local/bin/python2.7-config /usr/local/bin/python2.7 /usr/local/lib/python2.7 
/usr/include/python2.6 
+0

可能更與平臺無關的探測項目從'whereis -b python'獲得正確的版本(可能需要一些啓發式)。當然,更好的做法是將腳本與所有當代版本(例如2.7 + 3.2及更高版本)兼容。 – mario

+0

whereis -b python:python:/ usr/bin/python /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6/usr/local/bin/python2的結果。 7-config /usr/local/bin/python2.7 /usr/local/lib/python2.7 /usr/include/python2.6 – Brana

回答

1
  1. 。在你的test.py文件中的錯誤。執行在終端中文件顯示以下輸出:

    bash: ./test.py: /usr/bin/env/python2.7: bad interpreter: Not a directory 
    

    爲了解決這個問題,第一行設置爲:

    #!/usr/bin/env python2.7 
    

    envpython2.7之間的空間。

  2. 您通過執行/usr/bin/python而不是運行腳本本身來覆蓋文件中的Python解釋器集。你應該執行的Python腳本如下:

    ini_set('display_errors', 'on'); 
    $output = array(); 
    $command = dirname(__FILE__) . "/test.py"; 
    exec($command, $output); 
    var_dump($output); 
    

    注:記得有Python的文件執行位設置:

    chmod +x test.py 
    
+0

我加了這個,但仍然收到錯誤。實際上#!/ usr/bin/env行不重要。 – Brana

+0

你是否從PHP調用該文件? – Brana

+0

我試過php腳本,發現它不起作用。據我瞭解這將調用默認腳本,但無論如何它不工作。我正在使用centos – Brana