使用参数导入python脚本

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)

在那里,问题是使用我想要的参数完全导入脚本.可能吗?

Jam*_*urn 5

您应该将参数处理代码和导入代码分开:

人.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)

但是,这似乎是实现您正在尝试做的事情的一种非常奇怪的方式。也许你可以明确你的目标?


use*_*788 5

如果要将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模块有助于在运行时加载模块.

希望这可以帮助!