Как запустить и остановить программу 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`