python中的argparse
库不适用于包含空格和末尾的“\”(反斜杠)的路径,argparse中的解析器将路径末尾的反斜杠解析为“(双引号)。
下面的代码是有相同问题的示例。
import argparse
if __name__=="__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-w', '--weight', type=str)
args = parser.parse_args()
print(args.weight_path)
例如在PowerShell中,
PS > python sample.py -w ".\test test\"
.\test test"
它对不包含空格的路径有效。
PS > python sample.py -w ".\testtest\"
.\test test\
PS > python sample.py -w "testtest\"
test test\
PS > python sample.py -w "testtest"
test test
在PowerShell中使用argparse有什么问题吗?
我甚至不知道如何搜索这个问题...
1条答案
按热度按时间pkwftd7m1#
您现在看到的是 Windows PowerShell中的*错误 *,该错误已在PowerShell (Core) 7+中得到纠正:
".\test test\"
的逐字值是.\test test\
,因为\
在PowerShell中 * 没有 * 特殊含义(PowerShell的转义符是```,即所谓的 * 反勾号 *)。".\test test\\"
放置在 * 后台 * 构造的进程命令行上,因为进程预期将\"
解析为 escaped"
字符。".\test test\"
,这使得Python将结尾的\"
解释为 verbatim"
(而 not 则抱怨结尾的 unescaped"
--即具有 syntactic 函数的"
--是 missing)。Windows PowerShell的***解决方法 * 是在关闭
"
**之前 * 手动 * 将\
字符加倍:顺便说一句:虽然 PowerShell(Core)7+ 已修复 * 此特定问题 *,但在传递给外部程序的参数中 * 故意 * 嵌入
"
字符方面仍存在一个长期存在的问题-请参见this answer。