当前位置: 首页 > 知识库问答 >
问题:

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

马欣德
2023-03-14

我有一个名为mymodule.py的脚本,它使用ArgParse。我希望能够编写一个脚本fakemicro.py,该脚本能够从mymodule.py导入主模块并向其传递参数。我的代码基于Brian的答案:https://www.reddit.com/r/learnpython/comments/3do2wr/where_to_put_argparse/和这里公认的答案:在Python中,我可以调用导入模块的main()吗?

我不断收到意想不到的错误,所以我希望你能帮忙。

#!/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:])
#!/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

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

共有1个答案

闻人飞白
2023-03-14

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

 类似资料:
  • 有没有比传递分隔字符串并稍后解析它更优雅的方法来传递可选的整数列表到?我也有一个位置论点。 不工作,因为试图获取并抱怨它不是整数。 理想情况下,我想与其中一个执行 或者类似的东西,但也能

  • 假设我需要一个命令,如python test.py--layer 3--size 100100 其中 和大小是一个逗号分隔的列表 请帮我做这个命令

  • 问题内容: 我正在尝试使用argh库将参数列表传递给python脚本。可以接受类似以下内容的输入: 我的内部代码如下所示: 这是它的行为方式: 这个问题看起来非常简单:argh仅接受第一个参数,并将其视为字符串。如何使它“期望”一个整数列表? 我看到这是如何在optparse中完成的,但是(未弃用的)argparse呢?还是使用argh更好的修饰语法?这些似乎更pythonic。 问题答案: 使用

  • 我有以下设置。我正在尝试动态加载 a.py 模块(在这种情况下从 c.py 加载,并将其调用为BeLoaded)。然后我想导入另一个模块文件B,它有一个类,该类将继承该类到BeLoaded.otherClass。我知道如果我在 b.py 中导入 c.py 可以解决问题,但由于我是动态加载 c.py,我不确定如何做到这一点。如果我可以在导入变量之前以某种方式将变量传递给 b.py,它将起作用,但我不

  • 问题内容: 我有一个大约有2000条记录的CSV文件。 每个记录都有一个字符串和一个类别: 我需要将此文件读入如下列表: 如何使用Python将CSV导入到我需要的列表中? 问题答案: 使用csv模块: 输出: 如果你需要元组: 输出: 旧的Python 2答案,也使用csv模块:

  • 问题内容: 我正在学习如何在Python中嵌入Rust函数,并且如果我的输入是s而不是list ,一切都可以正常工作。 如果我的文件是: 我可以这样使用: 但是,如果我更改为: 我不能再在Python中使用它(此编译良好): 原因,尽管我可以这样做是因为Python和Rust都是 动态数组 ,但显然我在这里缺少了一些东西。 为什么我的尝试不起作用?我该怎么做才能解决? 问题答案: 不要这样做: 基