Это не проблема с python, и ваш код не содержит ошибок. Это проблема с браузерами. При запуске исполняемого файла firefox или chrome с --new-window
открывается новое окно в существующем экземпляре.
Другими словами, процесс, который вы только что начали, подключается к уже существующему процессу firefox/chrome и инструктирует , что процесс открывает новое окно, а затем завершается. Поэтому, когда вы вызываете terminate()
, ничего действительно не происходит, потому что процесс, который вы начали, уже закончился.
Вы можете проверить это с помощью нескольких строк кода:
>>> import subprocess
>>> p = subprocess.Popen(['firefox', '-new-window'])
>>> p.wait() # uh-oh. this should be blocking!
0
>>> p.terminate()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 1551, in terminate
self.send_signal(signal.SIGTERM)
File "/usr/lib/python2.7/subprocess.py", line 1546, in send_signal
os.kill(self.pid, sig)
OSError: [Errno 3] No such process
Вы должны сообщить браузеру, чтобы открыть новый экземпляр вместо нового окна. Firefox имеет параметр -new-instance
, хотя, пытаясь его использовать, единственное, что я получаю, это всплывающее окно, в котором говорится, что я не могу открыть два экземпляра браузера. Разрешено ли открытие нескольких экземпляров браузера в определенном сеансе ОС, зависит от браузера, и может оказаться невозможным.
В Chrome, я считаю, вы можете открыть новый сеанс, сообщающий Chrome использовать другой каталог для хранения своих данных (см., Например, here). Не знаю, возможно ли это в firefox.
Большое спасибо! Я попробую использовать Chrome с другим каталогом для пользовательских данных. Кроме того, не имеет смысла, что Firefox имеет параметр -new-instance, но не позволяет открывать несколько экземпляров! – metanoia
@quasistatic: допускаются множественные экземпляры, просто они должны использовать разные профили. – mhawke