Ark*_*ady 4 python import arguments
我有脚本:
moving1.py:
def move():
print("walk!")
Run Code Online (Sandbox Code Playgroud)
moving2.py:
def move():
print("run!")
Run Code Online (Sandbox Code Playgroud)
而man.py,可以通过参数move1或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()
Run Code Online (Sandbox Code Playgroud)
现在我有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()
Run Code Online (Sandbox Code Playgroud)
存在许多类似的问题,但它们并不完全符合我的要求.如何为导入的脚本添加参数?问题不是检查
if __name__ = "__main__":
Run Code Online (Sandbox Code Playgroud)
在那里,问题是使用我想要的参数完全导入脚本.可能吗?
您应该将参数处理代码和导入代码分开:
人.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])
Run Code Online (Sandbox Code Playgroud)
测试人员.py
import man
man.setup(<name>)
man.move()
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是实现您正在尝试做的事情的一种非常奇怪的方式。也许你可以明确你的目标?
如果要将filename作为命令行参数,并且要导入它,则使用imp load_source模块.
import imp
module = imp.load_source("module.name", sys.argv[1])
#Then call the function
module.move()
Run Code Online (Sandbox Code Playgroud)
基本上,imp模块有助于在运行时加载模块.
希望这可以帮助!