2013-09-26 2 views
3

Мой скрипт запускает команду каждые X секунд.Как получить имя браузера по умолчанию с помощью python

Если команда похожа на «start www» -> открывает веб-сайт в браузере по умолчанию, я хочу иметь возможность закрыть браузер до следующего запуска команды.

Эта короткая часть скрипта ниже:

if "start www" in command: 
    time.sleep(interval - 1) 
    os.system("Taskkill /IM chrome.exe /F") 

Я хочу, чтобы быть в состоянии поддерживать FireFox, то есть, хром и опера, и только закрыть браузер, который открыл по URL.

Для этого мне нужно знать, какой процесс убить.

Как я могу использовать python для определения моего браузера os `s по умолчанию в Windows?

+0

Как вы _описываете браузер по URL-адресу? 'Webbrowser.open'? 'Os.startfile'? Запуск '' start '{} "'. Format (url)' через 'os.system'? Использование стороннего модуля? – abarnert

+0

попробуйте следующее: http://stackoverflow.com/questions/5916270/pythons-webbrowser-launches-ie-instead-of-default-on-windows-7 – Vivek

+0

@Vivek: Я не думаю, что это отвечает на вопрос OP. По-видимому, он уже знает, как открыть веб-страницу (хотя он не сказал нам, как он это делает). Он просто хочет знать, как убить процесс, используемый для открытия этой веб-страницы. – abarnert

ответ

5

Решение будет отличаться от ОС к ОС. В Windows, браузер по умолчанию (то есть обработчик по умолчанию для протокола http) можно прочитать из реестра по адресу:

HKEY_CURRENT_USER\Software\Classes\http\shell\open\command\(Default) 

Python имеет модуль для работы с реестром Windows, так что вы должны быть в состоянии сделать:

from _winreg import HKEY_CURRENT_USER, OpenKey, QueryValue 
# In Py3, this module is called winreg without the underscore 

with OpenKey(HKEY_CURRENT_USER, 
      r"Software\Classes\http\shell\open\command") as key: 
    cmd = QueryValue(key, None) 

Вы получите назад строку командной строки, которая имеет %1 маркер в нем, где URL, который будет открыт должен быть вставлен.

Возможно, вы используете модуль subprocess для обработки запуска браузера; вы можете сохранить объект процесса браузера и убить тот точный экземпляр браузера, а не слепо убивать все процессы, имеющие одинаковое имя исполняемого файла. Если у меня уже открыт браузер по умолчанию, я собираюсь быть очень сырым, если вы просто убьете его без предупреждения. Конечно, некоторые браузеры не поддерживают несколько экземпляров; второй экземпляр просто передает URL-адрес существующему процессу, поэтому вы все равно не сможете его убить.

+0

Это действительно правильный ответ, если он использует 'os.startfile' или' start' через 'os.system' ... но так как это, видимо, _is_, что он делает, +1. – abarnert

+0

ОК, как использовать подпроцесс для запуска команды «запустите www.google». У меня с этим трудное время. –

+0

Не используйте 'start'. 'start' уходит сразу после передачи управления браузеру. Запустите браузер напрямую. – kindall

Смежные вопросы