gpt4 book ai didi

python - 将 argparse 转义字符作为选项处理

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:34 24 4
gpt4 key购买 nike

argparse 库处理转义字符(如\t 到制表符和\n 到换行符)的方式与我喜欢的不同。 An answer to this question给出了一个解决方案,但我想让它对用户不那么明显。

给定程序:

#!/usr/bin/env python3
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-d', '--delimiter', default='\t')
args = parser.parse_args()
print(args)

您将收到此输出:

bash$ parser.py -d \t
Namespace(delimiter='t')

bash$ parser.py -d \\t
Namespace(delimiter='\\t')

bash$ parser.py -d '\t'
Namespace(delimiter='\\t')

bash$ parser.py -d '\\t'
Namespace(delimiter='\\\\t')

bash$ parser.py -d "\t"
Namespace(delimiter='\\t')

bash$ parser.py -d "\\t"
Namespace(delimiter='\\t')

bash$ parser.py -d $'\t'
Namespace(delimiter='\t')

bash$ parser.py -d $'\\t'
Namespace(delimiter='\\t')

bash$ parser.py -d $"\t"
Namespace(delimiter='$\\t')

bash$ parser.py -d $"\\t"
Namespace(delimiter='$\\t')

我只用

得到想要的参数
parser.py -d $'\t'

但我希望输入看起来像

parser.py -d \t 

或不太优选

parser.py -d '\t'
parser.py -d "\t"

如果我想改变行为,我可以使用 argparse 库来做这件事吗?如果没有,我是否可以在现有的 argparse 库之上编写行为?如果不是,这是否只是 bash 将参数传递给 argparse 的方式,因此不在我的手中?如果这是真的,这是否通常记录给用户,或者这种行为是否被认为是正常的?

最佳答案

假设问题部分是关于如何执行@hpaulj 解释的后处理,并且由于我在上面的链接中看不到 Python 3 的即时解决方案,这里有一个快速解决方案:

import codecs

def unescaped_str(arg_str):
return codecs.decode(str(arg_str), 'unicode_escape')

然后在解析器中:

parser.add_argument('-d', '--delimiter', type=unescaped_str, default='\t')

这将使您不太理想的情况有效:

parser.py -d '\t'
parser.py -d "\t"

但不是所需的未转义 \t。无论如何,由于没有检查机制,此解决方案可能很危险......

关于python - 将 argparse 转义字符作为选项处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com