2017-10-12 119 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