我有一个简单的脚本test.py
import sys
print sys.argv
如果我跑
cmd中的 python test.py abcd
,
我会得到['test.py','abcd']。
但是,如果我跑
python -m test.py abcd
我会得到
['-c', 'abcd']
E:\Program Files (x86)\py\python.exe: No module named test.py.
为什么'-c'
在这里?我搜索了Stack Overflow关于'-m'
的使用,但仍然感到困惑。
答案 0 :(得分:8)
-m
开关告诉python查找模块或包以导入并运行它的__main__
条目。请参阅-m
switch documentation:
在
sys.path
搜索指定的模块,并将其内容作为__main__
模块执行。
对于您的情况,这意味着Python正在寻找名为test.py
的包(注意:不 文件名称)。要找到它,Python首先导入模块test
(来自您的test.py
文件),以查找名为py
的子模块。这失败了。但在此过程中,您的test
模块仍然运行并打印出sys.argv
。
-c
列表中的sys.argv
开关是此过程如何工作的内部实现细节。有关详细信息,请参阅Python issue #8202:
我记得,通过捎带现有的
main.c
语义,我使用了一些hack来让-m
正确地实现-c
。我会找到hack并用一些正确的'-c'
或'-m'
逻辑替换它。
如果您想使用-m
开关,则需要放弃.py
部分;这只是文件扩展名,而不是模块名称:
python -m test abcd