导入带参数的Python脚本
我有几个脚本:
moving1.py:
def move():
print("walk!")
moving2.py:
def move():
print("run!")
还有一个man.py,它可以接受参数,来决定执行moving1或moving2脚本。
man.py:
import sys
if len(sys.argv) <= 1:
exit("Too less arguments calling script")
__import__(sys.argv[1])
moving = sys.modules[sys.argv[1]]
def move():
moving.move()
现在我有一个testman.py脚本,它需要测试man.py的所有执行方式:
testman.py
import man #and somehow add here as argument "moving1"
man.move()
import man #and somehow add here as argument "moving2"
man.move()
有很多类似的问题,但它们并没有完全解决我想要的。如何给导入的脚本添加参数呢?问题不在于检查
if __name__ = "__main__":
而是要准确地导入脚本,并带上我想要的参数。这可能吗?
2 个回答
6
如果你在命令行中输入文件名作为参数,并且想要导入这个文件,可以使用 imp load_source 模块。
import imp
module = imp.load_source("module.name", sys.argv[1])
#Then call the function
module.move()
简单来说,imp模块可以帮助你在程序运行时加载模块。
希望这对你有帮助!
7
你应该把处理参数的代码和导入模块的代码分开:
man.py
import sys
def move():
moving.move()
def setup(module):
global moving
moving = __import__(module)
if __name__ == "__main__":
if len(sys.argv) <= 1:
exit("Too less arguments calling script")
setup(sys.argv[1])
testman.py
import man
man.setup(<name>)
man.move()
不过,这样做似乎有点奇怪,可能你可以解释一下你的目标是什么?