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

时间:2019-01-09 13:55:23

标签: python cmd main argparse

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

问题:由于从Spyder控制台运行代码时,代码运行正常,因此我决定加紧学习cmd调用程序,argparse和 main 功能。我尝试实现该功能,但出现以下错误:

Unrecognized arguments (the output path I pass from cmd)

问题:关于我在做什么错的任何想法?

obs :如果需要完整的脚本,我可以将其发布在这里,但是由于从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()

2 个答案:

答案 0 :(得分:3)

如果您决定使用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

如果您在程序启动时错过其中之一,则会收到类似人类可读的错误消息

  

错误:需要以下参数:id

答案 1 :(得分:1)

您可以删除整个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])