导入带参数的Python脚本

10 投票
2 回答
27712 浏览
提问于 2025-04-18 10:52

我有几个脚本:

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()

不过,这样做似乎有点奇怪,可能你可以解释一下你的目标是什么?

撰写回答