在传递 argparse 列表时导入 python 模块

import python module while passing argparse list

我有一个名为 mymodule.py 的脚本,它使用了 argparse。我希望能够编写一个脚本 fakemicro.py,它将能够从 mymodule.py 导入主模块并将参数传递给它。 我的代码基于 Brian 在这里的回答:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/ and the accepted answer here: 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 会看到我通过了 -i arg1 -o arg2 mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]])

下面是 mymodule.py 在命令行上单独 运行 时的输出:

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

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

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