如何在Mojo中向Python模块传递参数?
在Mojo中调用Python模块并传递命令行参数
要解决这个问题,你需要调整Mojo代码的导入方式,并根据Python模块的结构选择合适的参数传递方式,具体如下:
1. 修正模块导入
首先,Python.import_module不需要带.py后缀,正确的导入方式是:
let mypython = Python.import_module("myScript")
2. 两种参数传递方案
方案一:直接调用模块的main函数(推荐)
如果你的myScript.py中封装了main函数,并且支持传入参数列表(比如使用argparse时允许传入args参数),可以直接调用该函数并传递参数:
假设myScript.py的结构如下:
import argparse def main(args=None): parser = argparse.ArgumentParser() parser.add_argument("-i", help="输入图片路径") parsed_args = parser.parse_args(args) # 你的业务逻辑 return parsed_args.i if __name__ == "__main__": main()
对应的Mojo代码:
from python import Python fn use_my_module() raises: Python.add_to_path(".") let mypython = Python.import_module("myScript") # 传递参数列表,模拟命令行的"-i input.jpg" let result = mypython.main(["-i", "input.jpg"]) print(result)
方案二:修改Python的sys.argv(适配无独立main函数的脚本)
如果myScript.py没有暴露main函数,而是直接在if __name__ == "__main__"代码块中处理命令行参数,你可以通过修改Python的sys.argv来模拟命令行调用:
from python import Python fn use_my_module() raises: Python.add_to_path(".") # 导入Python的sys模块,修改命令行参数列表 let sys = Python.import_module("sys") sys.argv = ["myScript.py", "-i", "input.jpg"] # 导入目标模块 let mypython = Python.import_module("myScript") # 如果脚本的核心逻辑在__main__块中且导入时未自动执行,可通过exec运行脚本内容 # Python.exec("exec(open('myScript.py').read())")
注意事项
- 确保
myScript.py位于当前工作目录,或者通过Python.add_to_path添加其所在路径 - 如果脚本使用
argparse,优先选择方案一,直接传参给main函数更简洁可控
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

