这不是python问题,并且您的代码不包含错误.这是浏览器的问题.使用–new-window启动firefox或chrome的可执行文件时,将在浏览器的现有实例中打开一个新窗口.
换句话说,您刚刚开始的进程连接到现有的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 "", line 1, in
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选项,即使在尝试使用它时,我唯一得到的是弹出窗口显示我无法打开浏览器的两个实例.是否允许在某个OS会话中打开多个浏览器实例取决于浏览器,可能无法实现.
在Chrome上,我相信您可以打开一个新会话,告诉Chrome使用其他目录存储其数据(例如,请参阅here).不知道这是否可行 在Firefox中.