2017-10-12 82 views
1

昨晚我花了5.5小時試圖讓PHP執行並接收Virtualenv'ed Python腳本的輸出。沒有工作;除了不是Virtualenv的腳本。使用PHP調用Virtualenv'ed Python腳本

我所試圖做的事:

我試圖讓PHP呼叫virtualenv'd安裝報業LIB輸出文本的時候我把它。

我現在擁有的一切:

PHP:(更新)

<?php 
$output = exec('newspaper2/bin/python3 /var/www/html/components/python/test.py 2>&1', $output2); 
print_r(error_get_last()); 
echo $output2; 
echo $output; 

...這使用非的virtualenv腳本時,工作

的Python:(更新)

from newspaper import Article 
url = 'http://example.com/' 
article = Article(url) 
article.download() 
article.html 
article.parse() 
article.authors 
article.publish_date 
string = article.text 
print(string) 

什麼問題是:

我可以運行PHP是在命令行運行腳本,它輸出就好了。

我曾嘗試:

使用PHP,(我已經嘗試了所有的「高管」呼籲PHP)它似乎無法打開虛擬環境,並沒有返回。

之前的腳本我稱爲「python3」和其他一些事情無濟於事。

是的,我已經chmoded它是可執行...

我覺得這應該是如此簡單。

我已經嘗試過在其他帖子和網絡上的建議無濟於事。

問題:

  • 我有沒有成立的virtualenv錯了嗎?
  • 在Python腳本的頂部,而不是「#!/ usr/bin/env python3」應該調用別的東西嗎?
  • 如果是這樣,我在哪裏可以找到它?我應該從頭開始,並將幫助 ?

謝謝你的幫助;

PS:我正在運行Ubuntu16,PHP7,我需要使用Python3

回答

0

好的,我終於弄明白了,在這個過程中學到了很多東西。我默認使用的newspaper lib嘗試寫入用戶主目錄的基礎。在這種情況下,它試圖寫入www-data,/var/www

要解決這個問題:

  1. 轉到settings.py文件中newspaper庫。
  2. 編輯變量DATA_DIRECTORY = '.newspaper_scraper'並將其更改爲DATA_DIRECTORY = '.path/to/writable/directory'
  3. 保存文件,你應該很好去。

我不知道爲什麼它沒有返回將更早解釋這些錯誤。

希望這可以幫助其他人。

非常感謝Sergey Vasilyev的幫助。我非常感謝。

1

在virtualenv'ed腳本(即通過setuptools的切入點安裝),你不應該接觸的家當(#!...第一線)。它由virtualenv & setuptools &相關工具填充。

如果你指定你自己的shebang,那麼它不是virtualenv的腳本。在這種情況下,直接調用Python:

exec('/path/to/venv/bin/python3 /var/www/html/components/python/testing.py'); 

或者,你可以把絕對路徑的virtualenv的蟒蛇二進制的PY-腳本,但這並不看起來是個好主意。

另外,請記住,virtualenvs是不可重定位的。所以他們應該留在他們創造的路上。

另請注意,exec()只返回輸出的最後一行。您可能需要shell_exec()exec('...', $output)才能獲得整個輸出。

此外,還不清楚腳本會發生什麼情況,以及stderr上打印的是什麼內容。試試看這個命令是什麼錯誤:

exec('/path/to/script 2>&1', $output) 
#OR: 
exec('/path/to/venv/bin/python3 /path/to/script 2>&1', $output) 
+0

我明白了。由於我修改了shebang,是否需要重新創建virtualenv?我不認爲我移動了virtualenv腳本,如果是的話,我刪除它並重新開始?謝謝 – regor2

+0

要麼恢復原來的shebang,要麼重新開始。 –

+0

好吧,我不確定如何「恢復原來的shebang」,所以我創建了一個新的virtualenv。我在裏面創建了一個新腳本,它沒有創建自己的shebang。我用'newspaper2/bin/python3/var/www/html/components/python/test.py'通過命令行運行它。 PHP沒有任何東西。它拋出'sh:1:newspaper2/bin/python3:not found'有什麼建議嗎? – regor2