场景:我有一个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()
答案 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])