使用PHP调用Virtualenv'ed Python脚本
昨晚我花了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
好的,我终于弄明白了,在这个过程中学到了很多东西。我默认使用的newspaper
lib尝试写入用户主目录的基础。在这种情况下,它试图写入www-data
,/var/www
。
要解决这个问题:
- 转到
settings.py
文件中newspaper
库。 - 编辑变量
DATA_DIRECTORY = '.newspaper_scraper'
并将其更改为DATA_DIRECTORY = '.path/to/writable/directory'
- 保存文件,你应该很好去。
我不知道为什么它没有返回将更早解释这些错误。
希望这可以帮助其他人。
非常感谢Sergey Vasilyev的帮助。我非常感谢。
在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)
我明白了。由于我修改了shebang,是否需要重新创建virtualenv?我不认为我移动了virtualenv脚本,如果是的话,我删除它并重新开始?谢谢 – regor2
要么恢复原来的shebang,要么重新开始。 –
好吧,我不确定如何“恢复原来的shebang”,所以我创建了一个新的virtualenv。我在里面创建了一个新脚本,它没有创建自己的shebang。我用'newspaper2/bin/python3/var/www/html/components/python/test.py'通过命令行运行它。 PHP没有任何东西。它抛出'sh:1:newspaper2/bin/python3:not found'有什么建议吗? – regor2