diff --git a/bottle.py b/bottle.py index 23fff762..9f4c4bcc 100755 --- a/bottle.py +++ b/bottle.py @@ -3633,6 +3633,14 @@ def load_app(target): _debug = debug +def _main_module_name(): + package = vars(sys.modules['__main__'])['__package__'] + if package is None: + return None + else: + file_path = sys.argv[0] + base_name, _ = os.path.splitext(os.path.basename(file_path)) + return package if base_name == '__main__' else '.'.join((package, base_name)) def run(app=None, server='wsgiref', @@ -3667,11 +3675,13 @@ def run(app=None, try: fd, lockfile = tempfile.mkstemp(prefix='bottle.', suffix='.lock') os.close(fd) # We only need this file to exist. We never write to it + module_name = _main_module_name() + options = [sys.argv[0]] if module_name is None else ['-m', module_name] + args = [sys.executable] + options + sys.argv[1:] + environ = os.environ.copy() + environ['BOTTLE_CHILD'] = 'true' + environ['BOTTLE_LOCKFILE'] = lockfile while os.path.exists(lockfile): - args = [sys.executable] + sys.argv - environ = os.environ.copy() - environ['BOTTLE_CHILD'] = 'true' - environ['BOTTLE_LOCKFILE'] = lockfile p = subprocess.Popen(args, env=environ) while p.poll() is None: # Busy wait... os.utime(lockfile, None) # I am alive!