> How can I get the *really* original command line that started my python
> interpreter?
> 
> Werkzeug has a WSGI server which reloads itself when files are changed
> on disk. It uses `args = [sys.executable] + sys.argv` to kind of
> recreate the command line, and the uses subprocess.call to run that
> command line.
> 
> BUT that's problematic as, when you run::
> 
>       python -m mypackage --config
> 
> sys.argv printed in mypackage/__main__.py will be::
> 
>       ['/full/path/to/mypackage/__main__.py', '--config']
> 
> so you get::
> 
>       python /full/path/to/mypackage/__main__.py --config
> 
> instead of::
> 
>       python -m mypackage --config
> 
> 
> the difference in the 2 cases is what the current package is, and
> whether you can use relative imports.

BTW, the same thing happens in Python 3.2.2. To reproduce::

mkdir /tmp/X
cd /tmp/X

mkdir mypackage
touch  mypackage/__init__.py mypackage/dummy.py

cat <<EOF > mypackage/__main__.py
from __future__ import print_function, absolute_import
import os, sys, subprocess

def rerun():
    new_environ = os.environ.copy()
    new_environ['TEST_CHILD'] = 'true'
    args = [sys.executable] + sys.argv
    subprocess.call(args, env=new_environ)

if os.environ.get('TEST_CHILD') != 'true':
    Role = 'Parent'
    rerun()
else:
    Role = 'Child'

try:
    from . import dummy
except:
    print('Exception in %s' % Role)
else:
    print('Success in %s' % Role)
EOF



Both::
        
        python2 -m mypackage

or::

        python3 -m mypackage


will print::

        Exception in Child
        Success in Parent
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to