从命令行运行__main__ .py中的函数

时间:2013-11-20 13:28:45

标签: python

我有以下__main__.py文件:

def all():
    print "hello world!"

if __name__ == "__main__":
    print "bar"

如何从命令行运行函数all?以下似乎不起作用:

python -c "import __main__; __main__.all()"
python .

我不允许修改__main__.py文件。 (这是我正在尝试贡献的FLOSS项目)

2 个答案:

答案 0 :(得分:3)

__main__模块始终是包的一部分。导入时包括包名称:

python -c 'from package.__main__ import all; all()'

演示:

$ mkdir testpackage
$ touch testpackage/__init__.py
$ cat << EOF > testpackage/__main__.py
> def all():
>     print "Hello world!"
> if __name__ == '__main__':
>     all()
> EOF
$ python testpackage
Hello world!
$ python -c 'from testpackage.__main__ import all; all()'
Hello world!

答案 1 :(得分:0)

您可能不希望这样做但是__main__.py在您的工作目录中:

python -c "import imp; trick = imp.load_source('__main__', './__main__.py'); trick.all()"

如果您的文件位于foo/__main__.py这样的目录中,那么您可以

python -c "import imp; trick = imp.load_source('foo.__main__', 'foo/__main__.py'); trick.all()"

另请参阅What is __main__.py?How to import a module given the full path?