在 Python 中将目录路径作为字符串传递给 argparse

Passing directory paths as strings to argparse in Python

场景: 我有一个 python 脚本,它接收 2 个目录路径(输入和输出文件夹)和一个变量 ID 作为输入。有了这些,它从 xlsx 和 xlsm 宏执行数据收集过程,修改数据并保存到 csv(从输入文件夹,代码的内部函数将 运行 循环,以获取多个文件并处理它们,一次一个)。

问题: 由于当我从 Spyder 控制台 运行ning 时代码运行良好,我决定加强它并了解 cmd 调用程序, argparse 和 main 函数。我试图实现它,但出现以下错误:

Unrecognized arguments (the output path I pass from cmd)

问题:对我做错了什么有什么想法吗?

Obs: 如果需要完整的脚本,我可以在此处 post,但由于它在来自 Spyder 的 运行 时有效,我相信错误在我的 argparse 函数中。

代码(argparse函数和__main__):

# This is a function to parse arguments:
def parserfunc():
    import argparse
    parser = argparse.ArgumentParser(description='Process Files')
    parser.add_argument('strings', nargs=3)
    args = parser.parse_args()
    arguments = args.strings
    return arguments

# This is the main caller    
def main():
    arguments = parserfunc()
    # this next function is where I do the processing for the files, based on the paths and id provided):
    modifierfunc(arguments[0], arguments[1], arguments[2])

#
if __name__ == "__main__":
    main()

您可以删除整个 parserfunc() 函数。 sys.argv 确实包含葡萄提到的所有参数(总是作为字符串处理)。

所以不是这个:

modifierfunc(arguments[0], arguments[1], arguments[2])

这应该足够了:

import sys
modifierfunc(sys.argv[0], sys.argv[1], sys.argv[2])

也许,先打印,看看 sys.argv 是否包含您期望的值。

print('Argument 0='+sys.argv[0])
print('Argument 1='+sys.argv[1])
print('Argument 2='+sys.argv[2])

如果您决定使用 argparse,则使用命名参数,而不是索引。以下是示例代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('input')
parser.add_argument('output')
parser.add_argument('id')

args = parser.parse_args()
print(args.input, args.output, args.id) # this is how you use them

万一您在程序启动时错过其中一个,您将收到人类可读的错误消息,例如

error: the following arguments are required: id