【问题标题】:import python module while passing argparse list在传递 argparse 列表时导入 python 模块
【发布时间】:2017-12-04 13:51:51
【问题描述】:

我有一个名为 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 会看到我通过-i arg1 -o arg2 通过 mymodule.main(['-i', sys.argv[1], '-o', sys.argv[2]]) ?

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

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

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

【问题讨论】:

  • mymodule 不会自行运行,是吗?您没有使用args 参数。
  • 很抱歉,我也没有导入 sys。我添加了 args = parse_args(args) 现在 mymodule.py 在按原样运行时返回预期值。我将编辑我的原始帖子以反映这一点。

标签: python-2.7 argparse


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2018-07-19
    • 2015-08-13
    相关资源
    最近更新 更多