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 环境有关,因为在 bash
中,$
表示变量的开始。 $output
可能会被替换为空字符串。 $
本身不会被替换。
这是因为大多数 shell 将以 $ 开头的字符串视为变量,并且当用双引号引用时,shell 会尝试用它的值替换它。
只需打开 terminal/console 并在 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$
(最后一个美元符号保留在那里,因为它只是一个美元符号,不能是变量的名称)。
我正在尝试使用 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 环境有关,因为在 bash
中,$
表示变量的开始。 $output
可能会被替换为空字符串。 $
本身不会被替换。
这是因为大多数 shell 将以 $ 开头的字符串视为变量,并且当用双引号引用时,shell 会尝试用它的值替换它。
只需打开 terminal/console 并在 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$
(最后一个美元符号保留在那里,因为它只是一个美元符号,不能是变量的名称)。