想到的第一个想法源于execfile()
函数的可选参数。您可能可以执行以下操作:
#!python
def main(args):
results = do_stuff()
return results
if __name__ == '__main__':
import sys
main(sys.argv[1:])
if __name__ == 'execfile':
main(args)
...然后当您想通过execfile()
为它的可选globals
参数提供字典来调用它时:
#!sh
python -c 'execfile(myfile, {"__name__":"execfile", "args":(1,2,3)}); ...'
当您通过调用您的功能时,这确实需要一些额外的工作,-c
因为您必须记住传递该字典并覆盖'__name__'
...通过我想您实际上可以使用任何有效的 Python 标识符。这只是__name__
最接近您实际所做的事情。
下一个想法感觉有点脏,但依赖于对__file__
全局标识符的明显处理。python -c
如果正在导入或执行文件,则在调用和设置时似乎未设置。所以这有效(至少对于 CPython 2.7.9):
#!/usr/bin/env python
foo='foo'
if __name__ == '__main__' and '__file__' not in globals():
print "Under -c:", foo
elif __name__ == '__main__':
print "Executed standalone:", foo
...如果您使用它,请不要给我信用。它看起来 ...
……嗯……
... 只是 ...
....错了