使用Python单击将具有特殊字符的CLI参数视为字符串
在接受参数时,如何将使用Python单击将具有特殊字符的CLI参数视为字符串,python,bash,python-click,Python,Bash,Python Click,在接受参数时,如何将python jcr.py之后的所有内容视为字符串,而不是bash命令 例1: input: `python jcr.py ~!@` throws: `bash: !@: event not found` desired: `received:->~!@<-` input:`python jcr.py~@` 抛出:`bash:!@:未找到事件` 所需:`received:->~!@%s由于这些是特殊字符,您可以在符号周围添加单引号或双引号,并在python文
python jcr.py
之后的所有内容视为字符串,而不是bash命令
例1:
input: `python jcr.py ~!@`
throws: `bash: !@: event not found`
desired: `received:->~!@<-`
input:`python jcr.py~@`
抛出:`bash:!@:未找到事件`
所需:`received:->~!@%s由于这些是特殊字符,您可以在符号周围添加单引号或双引号,并在python文件中解析这些字符CLI将由外部用户使用,因此理想情况下,我不必强制要求他们在symbols@sidd99-这是你无法控制的。您的Python代码一开始并没有失败——它是Python解释器的shell调用。特殊shell字符,如(
,~
或!
必须在终端(或调用脚本)中转义,否则,shell将按照其约定处理它们。@amitai irron我明白了,这是否意味着我无能为力?@sidd99:她真正的问题是,为什么您要将通常为bash保留的字符传递给运行在bash下的工具。您的用户将习惯于使用bash,并且希望这些字符具有特殊含义,因此期望它们转义是合理的。您可以做的是要求用户输入双引号之间的每个命令行参数,否则无法输入不转义的特殊字符
input: `python jcr.py (`
throws: `bash: syntax error near unexpected token `('`
desired: `received:->(<-`
import click
@click.command()
@click.argument('cmd', nargs=-1)
def jcr(cmd):
click.echo('received:->%s<-' % (" ".join(cmd)))
if __name__ == '__main__':
jcr()