使用python和argparse,用户可以使用-d作为标志输入文件名。
parser.add_argument("-d", "--dmp", default=None)
但是,当路径包含空格时,这会失败。例如。
-d C:\SMTHNG\Name with spaces\MORE\file.csv
注意:这些空格会导致错误(标志只接受'C:SMTHNG \ Name'作为输入)。
error: unrecognized arguments: with spaces\MORE\file.csv
花了我更长的时间来找到这个问题的解决方案...... (没有为它找到Q& A所以我自己发帖子)
答案 0 :(得分:33)
对于那些无法解析参数并仍然得到错误的人:无法识别的参数:"我找到了一个解决方法:
parser.add_argument('-d', '--dmp', nargs='+', ...)
opts = parser.parse_args()
然后当你想要使用它时
' '.join(opts.dmp)
答案 1 :(得分:21)
简单的解决方案: 如果argparse用引号括起来,则将空格填充的字符串视为单个参数。
此输入有效并“解决”了问题:
-d "C:\SMTHNG\Name with spaces\MORE\file.csv"
注意:参数周围有“”。
答案 2 :(得分:3)
今天也陷入了这个问题。
-d "foo bar"
没有帮助。我不得不添加等号
-d="foo bar"
然后它确实有效。
答案 3 :(得分:1)
经过一些实验(python 2.7 Win10)后,我发现黄金法则是将引号("")放在包含空格的参数周围,如果有,则执行 NOT 在论证中没有空格。即使你传递一个字符串/路径。另外,单引号('')是一个坏主意,至少在Windows上是这样。
小例子: python script.py --path .... \ Some_Folder \ --string"这里有一个字符串"
答案 4 :(得分:-1)
您需要用引号将路径括起来,例如:
python programname.py -path "c:\My path with spaces"
在参数解析中,您会得到一个包含一个元素的列表。然后你必须像这样阅读它:
path = args.path[0]