导入 Python 模块时传递 argparse 列表

3
我有一个名为 mymodule.py 的脚本,它使用 argparse。我想编写一个名为 fakemicro.py 的脚本,能够导入来自 mymodule.py 的主模块并传递参数给它。
我的代码基于Brian在这里的答案:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/和这里的被接受的答案:In Python, can I call the main() of an imported module? 我一直遇到意外的错误,所以希望你能帮忙。
这是 mymodule.py 的内容:
#!/usr/bin/env python
import argparse
import sys
def parse_args(args):
    parser = argparse.ArgumentParser(
        description='yeah'
    )
    parser.add_argument(
        '-i', nargs='+',
        help='full path of input directory', required=True
    )
    parser.add_argument(
        '-o', '-output',
        help='full path of output directory', required=True
    )
    parsed_args = parser.parse_args()
    return parsed_args


def main(args):
    args = parse_args(args)
    print args.i
    print args.o
if __name__ == '__main__':
    main(sys.argv[1:])

以下是fakemicro.py的内容:

#!/usr/bin/env python

import mymodule
import sys
mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]])

我原以为这个函数的作用就像我在命令行中输入:mymodule.py -i path/to/1 -o path/to/2,但是我的脚本却出了问题。
$ fakemicro.py path/to/2 path/to/3
usage: fakemicro.py [-h] -i I [I ...] -o O
fakemicro.py: error: argument -i is required

我认为mymodule.py应该已经看到我通过mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]])传递了-i arg1 -o arg2参数?

当在命令行上单独运行mymodule.py时,输出如下:

$ mymodule.py -i 1 -o 2
['1']
2

任何帮助都将不胜感激。谢谢!

mymodule本身不会运行,对吧?你没有使用args参数。 - hpaulj
非常抱歉,我也没有导入sys。我添加了args = parse_args(args),现在当直接运行mymodule.py时,它返回了预期的值。我会编辑我的原始帖子以反映这一点。 - Tandy Freeman
1个回答

2

我解决了这个问题。 我没有将args参数传递给parsed_args = parser.parse_args()。 因此,解析器对象使用的是sys.argv [1:]作为其来源,而不是传递的任何内容。将该行更改为parsed_args = parser.parse_args(args)解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接