Retrieving the full command line

Tim Golden mail at timgolden.me.uk
Thu Jan 24 05:56:00 EST 2013


On 24/01/2013 10:06, Oscar Benjamin wrote:
> On 24 January 2013 04:49, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
> [SNIP]
>>
>> Contrariwise, I don't believe that there is currently *any* way to
>> distinguish between running a script with or without -m. That should be
>> fixed.
> 
> As I said earlier in the thread, the __package__ module global
> distinguishes the two cases:
> 
> ~$ mkdir pkg
> ~$ touch pkg/__init__.py
> ~$ vim pkg/__main__.py
> ~$ cat pkg/__main__.py
> import sys
> if __package__ is None:
>     cmdline = [sys.executable] + sys.argv
> else:
>     cmdline = [sys.executable, '-m', __package__] + sys.argv[1:]
> print(cmdline)
> ~$ python pkg/__main__.py arg1 arg2
> ['q:\\tools\\Python27\\python.exe', 'pkg/__main__.py', 'arg1', 'arg2']
> ~$ python -m pkg arg1 arg2
> ['q:\\tools\\Python27\\python.exe', '-m', 'pkg', 'arg1', 'arg2']

Reasonable (and thanks for the clear example), but it doesn't work
if the package which is reconstructing the command line the package
which was the target of the original command line. In my case,
I'm making use of the cherrypy reloader, whose __package__ is
cherrypy.process. But the command which invoked the program was
python -m myapp.

ie I'm issuing "python -m myapp". In myapp.__main__ I'm importing
cherrypy, itself a package, and somewhere in cherrypy.whatever there is
code which attempts to reconstruct the command line.

TJG



More information about the Python-list mailing list