title: Python - Flask - open a webpage in default browser
body: <p>I am working on a small project in Python. It is divided into two parts.</p>
  
  <p>First part is responsible to crawl the web and extract some infromation and insert them into a database.</p>
  
  <p>Second part is resposible for presenting those information with use of the database.
  Both parts share the database. In the second part I am using Flask framework to display information as html with some formatting, styling and etc. to make it look cleaner.</p>
  
  <p>Source files of both parts are in the same package, but to run this program properly user has to run crawler and results presenter separately like this :</p>
  
  <p><strong>python crawler.py</strong></p>
  
  <p>and then</p>
  
  <p><strong>python presenter.py</strong></p>
  
  <p>Everything is allright just except one thing. What I what presenter to do is to create result in html format and open the page with results in user's default browser, but it is always opened twice, probably due to the presence of run() method, which starts Flask in a new thread and things get cloudy for me. I don't know what I should do to be able to make my presenter.py to open only one tab/window after running it.</p>
  
  <p>Here is the  snippet of my code :</p>
  
  <pre><code>from flask import Flask, render_template
  import os
  import sqlite3
  
  
  # configuration
  DEBUG = True
  DATABASE = os.getcwd() + '/database/database.db'
  
  app = Flask(__name__)
  app.config.from_object(__name__)
  app.config.from_envvar('CRAWLER_SETTINGS', silent=True)
  
  
  
  def connect_db():
      """Returns a new connection to the database."""
      try:      
          conn = sqlite3.connect(app.config['DATABASE'])
      return conn
  except sqlite3.Error:
      print 'Unable to connect to the database'
      return False
  
  
  @app.route('/')
  def show_entries():
      u"""Loads pages information and emails from the database and
      inserts results into show_entires template. If there is a database
      problem returns error page.
      """
      conn = connect_db()
  
  
      if conn:        
      try:            
          cur = connect_db().cursor()
  
          results = cur.execute('SELECT url, title, doctype, pagesize FROM pages')    
          pages = [dict(url=row[0], title=row[1].encode('utf-8'), pageType=row[2], pageSize=row[3]) for row in results.fetchall()]   
  
  
          results = cur.execute('SELECT url, email from emails')
          emails = {}
  
  
          for row in results.fetchall():                
              emails.setdefault(row[0], []).append(row[1])                
  
          return render_template('show_entries.html', pages=pages, emails=emails)
  
      except sqlite3.Error, e:
          print ' Exception message %s ' % e
          print 'Could not load data from the database!'
          return render_template('show_error_page.html')
  
  
  else:
      return render_template('show_error_page.html')        
  
  
  if __name__ == '__main__':
      url = 'http://127.0.0.1:5000'
      webbrowser.open_new(url)
      app.run()
  </code></pre>