Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder2.hal-mli.net!de-l.enfer-du-nord.net!feeder1.enfer-du-nord.net!cs.uu.nl!news.stack.nl!newsfeed.xs4all.nl!newsfeed2.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'else:': 0.03; 'package,': 0.03; 'importing': 0.04; 'none:': 0.05; 'sys': 0.05; 'python': 0.09; 'cherrypy': 0.09; 'cherrypy,': 0.09; 'mkdir': 0.09; 'skip:[ 30': 0.09; 'subject:command': 0.09; 'thread,': 0.09; '"python': 0.16; "'-m',": 0.16; '*any*': 0.16; 'benjamin': 0.16; 'cases:': 0.16; 'from:addr:timgolden.me.uk': 0.16; 'from:name:tim golden': 0.16; 'message-id:@timgolden.me.uk': 0.16; 'received:74.55.86': 0.16; 'received:74.55.86.74': 0.16; 'received:smtp.webfaction.com': 0.16; 'received:webfaction.com': 0.16; 'tjg': 0.16; 'wrote:': 0.17; 'fixed.': 0.17; 'module': 0.19; 'import': 0.21; 'earlier': 0.21; 'somewhere': 0.24; 'command': 0.24; 'script': 0.24; 'header:In-Reply-To:1': 0.25; 'header:User- Agent:1': 0.26; 'skip:[ 10': 0.26; "doesn't": 0.28; 'cat': 0.29; "d'aprano": 0.29; 'issuing': 0.29; 'steven': 0.29; 'case,': 0.29; "i'm": 0.29; "skip:' 10": 0.30; 'code': 0.31; '(and': 0.32; 'running': 0.32; 'received:192.168.100': 0.33; 'to:addr:python- list': 0.33; 'thanks': 0.34; 'clear': 0.35; 'there': 0.35; 'but': 0.36; 'should': 0.36; 'itself': 0.37; 'two': 0.37; 'subject:: ': 0.38; 'to:addr:python.org': 0.39; 'received:192': 0.39; 'received:192.168': 0.40; 'between': 0.63; 'making': 0.64; 'believe': 0.69; 'touch': 0.69; 'from:addr:mail': 0.71; '2013': 0.84; 'distinguish': 0.84; 'oscar': 0.84 Date: Thu, 24 Jan 2013 10:56:00 +0000 From: Tim Golden User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120907 Thunderbird/15.0.1 MIME-Version: 1.0 To: python-list@python.org Subject: Re: Retrieving the full command line References: <50FE5AC7.3050909@timgolden.me.uk> <50ff24e8$0$29994$c3e8da3$5496439d@news.astraweb.com> <50ff5ffc$0$29877$c3e8da3$5496439d@news.astraweb.com> <5100bd49$0$29877$c3e8da3$5496439d@news.astraweb.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 39 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1359024965 news.xs4all.nl 6925 [2001:888:2000:d::a6]:58260 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:37557 On 24/01/2013 10:06, Oscar Benjamin wrote: > On 24 January 2013 04:49, Steven D'Aprano > 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