无法从PHP运行生成的python(selenium)脚本

我有一台用于无头seleniumtesting的Ubuntu机器。

我通过PHP在/var/www/tmp/random123name.py中生成一个python脚本并执行它们。 这个脚本在从命令行用户运行时工作,从web(apache www-data:www-data user)运行失败。

该脚本回忆一些系统/ python模块:

from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from time import sleep, strftime import os, json from pyvirtualdisplay import Display 

此代码返回1:

 $python = "sudo /usr/bin/python /var/www/tmp/random123name.py"; exec($python, $output, $return); echo "OUT<pre>".print_r($output,1)."</pre>"; #returns empty echo "RET<pre>".print_r($return,1)."</pre>"; #returns 1 

我用这种方式修改了/ etc / sudoers,没有运气:

 www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/python 

我也试过了

 www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/python /var/www/tmp/ 

添加万维网数据拨出组和其他一些尝试。 感谢您的支持。

我解决了:退出到youruser / root是不够的,你需要退出ssh会话并重新打开它,以加载visudo工作所需的一切。

正如你自己已经想出的,对sudoers改变不适用于运行会话,只适用于新的会话。 所以你需要注销并重新login才能看到它。

但更重要的是,你不应该为此需要sudo ,并且允许www-data用户以root身份运行python而不需要密码是非常可怕的。 当然,有一种方法可以让你的脚本在不需要root权限的情况下工作,而且我强烈的敦促你试图弄明白,而不是诉诸于sudo来达到这个目的。