在 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
场景: 我有一个 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