Why does (python -m ...) result in sys.argv like ['-c', ...] -
i have simple script test.py
import sys print sys.argv
if run
python test.py abcd
in cmd,
i ['test.py', 'abcd'].
however, if run
python -m test.py abcd
i
['-c', 'abcd'] e:\program files (x86)\py\python.exe: no module named test.py.
why '-c'
here? searched stack overflow utilize of '-m'
still confused.
the -m
switch tells python module or package import , run it's __main__
entry. see -m
switch documentation:
search sys.path
named module , execute contents __main__
module.
for case, means python looking package called test.py
(note: not file name). find it, python first imports module test
(from test.py
file), sub-module named py
. fails. in process test
module still run , prints out sys.argv
.
the -c
switch in sys.argv
list internal implementation detail of how process works. see python issue #8202 of details:
as recall, used bit of hack main.c
implement -m
correctly piggybacking on existing -c
semantics. i'll find hack , replace proper '-c'
or '-m'
logic.
if want utilize -m
switch you'll need drop .py
part; that's file extension, not module name:
python -m test abcd
python
No comments:
Post a Comment