繁体   English   中英

python argparse在遇到'$'后停止解析

[英]python argparse stops parsing after it encounters '$'

我试图使用argparse解析命令行

from argparse import ArgumentParser

argparser = ArgumentParser(prog="parse", description="desc")

create.add_argument("--name",dest="name",required=True,help="Name for element")
args = argparser.parse_args()
print(args)

当我用下面的命令执行它时

python argparser.py  --name "input$output$"

输出是:

('args:', Namespace(name='input$'))

预期产出:

('args:', Namespace(name='input$output$'))

你能帮忙弄清楚我做错了什么吗? 为什么argparse在遇到特殊字符后会停止解析?

这是因为大多数shell将以$开头的字符串视为变量,并且当引用双引号时,shell会尝试将其替换为其值。

Jut打开一个终端/控制台并在shell中键入它(这适用于bash和fish):

echo "hi$test"  # prints hi trying to interpolate the variables 'test'
echo 'hi$test' # prints hi$test no interpolation for single quotes

这发生在shell启动应用程序进程之前。 所以我认为在调用你的应用程序时,你需要传入单引号引用的字符串,或者用反斜杠转义$

echo "hi\$test" # prints hi$test since $ is escaped

如果你想看看Python实际上从shell接收的是一个参数,请直接检查sys.argv (这就是argparse和其他模块一样读取命令行参数)。

import sys
print sys.argv

在问题的这个特定情况下,会发生的是你的shell解析input$output$并尝试插入变量$output ,但没有定义这样的变量,所以它被一个空字符串替换。 因此,实际传递给Python的是因为参数是input$ (最后一个美元符号保留在那里因为它只是一个美元符号而不能是变量的名称)。

这可能与你的shell环境有关,因为在bash$表示变量的开始。 $output可能会替换空字符串。 $本身不会被替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM