Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python单击将具有特殊字符的CLI参数视为字符串_Python_Bash_Python Click - Fatal编程技术网

使用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()