【发布时间】:2019-01-09 13:55:23
【问题描述】:
场景:我有一个 python 脚本,它接收 2 个目录路径(输入和输出文件夹)和一个变量 ID 作为输入。有了这些,它从 xlsx 和 xlsm 宏执行数据收集过程,修改数据并保存到 csv(从输入文件夹,代码的内部函数将运行循环,以获取多个文件并处理它们,一个在时间)。
问题:因为当我从 Spyder 控制台运行代码时它运行良好,所以我决定加强它并了解 cmd caller、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()
【问题讨论】:
-
在您的情况下,您可以简单地使用
sys.argv全局数组而无需任何解析 -
@grapes 确实,使用 sys.argv(现在我知道它存在)这变得非常简单,感谢分享信息。不过,我想知道我在 argparse 上做错了什么,所以我可以学习如何正确使用它。
-
您的输出路径是否包含空格?如果是,这两个部分可以算作单独的参数,您将传递四个(或更多)而不是三个参数。在这种情况下,您应该正确引用或转义您的输入。你的解析功能对我有用。
-
我不知道。但只需用
script.py "input/file/Document with spaces.txt" output/file/Also\ with\ spaces.txt id调用它,所以要么用引号括起你的参数,要么用反斜杠转义空格。 -
调试
argparse代码时,显示sys.argv[1:]和args(或所有argparse 错误消息)很有用。在这种情况下,sys.argv[1:]应该有 3 个字符串。如果不是,则输入有问题 - 可能与 shell 如何拆分命令行有关。