Как запустить и остановить программу Linux, используя модуль подпроцесса в Python?
Я пишу веб-приложение, которое использует Selenium для скрининга другого веб-сайта. Этот скрипинг экрана происходит только один раз в день, поэтому Id скорее не оставляет Selenium и Xvfb все время.
Я пытаюсь выяснить, как запустить Xvfb и Selenium из Python, а затем остановить их после завершения скриншотов.
Если бы я делал это вручную, Id запустил их в командной строке и нажал CTRL C, чтобы остановить их. Я пытаюсь сделать то же самое с Python.
Кажется, я могу успешно запустить Xvfb следующим образом:
xvfb = Popen('Xvfb :99 -nolisten tcp', shell=True)
Но когда Ive попытался его прервать:
xvfb.terminate()
а затем попытался запустить его снова (повторяя мою первоначальную команду), он сообщает мне, что он уже запущен.
Ответы
Ответ 1
Я не знаю, почему вы хотите запустить Xvfb как root. Ваш обычный X-сервер должен запускаться только как root (для многих, но не для всех устройств) только для доступа к видеооборудованию; это не проблема для Xvfb по определению.
tempdir = tempfile.mkdtemp()
xvfb = subprocess.Popen(['Xvfb', ':99', '-nolisten', 'tcp', '-fbdir', tempdir])
Когда вы завершаете X-сервер, вы можете увидеть процесс
Ответ 2
Я предполагаю, что вы можете параметризовать свою систему, чтобы позволить любому пользователю запускать Xvfb, как описано здесь, решая все ваши проблемы
ИЗМЕНИТЬ
правильная строка командной строки
sudo chmod u+s `which Xvfb`