python - argparse 输入执行不应该执行的命令
问题描述
我在做一个项目时偶然发现了这种奇怪的行为。这是将重现相同问题的演示代码 -
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
parser = argparse.ArgumentParser(description='Random observations')
parser.add_argument('-g', '--get', help='Get n of something')
parser.add_argument('-c','--create', help='Create something')
args = vars(parser.parse_args())
if args['get']:
print(f"Retrieved {args['get']} resources...")
if args['create']:
print(f"Created resource..{args['create']}")
为了简洁起见,我使用chmod +x filename
现在使脚本可执行,这就是它变得奇怪的地方。如果我像这样运行脚本 -
$ ./so -c "Calling `./so -g 5`"
我得到的输出是 -
Created resource..Calling Retrieved 5 resources...
为什么字符串中的命令被执行,它不应该只是作为字符串输入并作为字符串输出吗?
我又做了一些实验,以下是我的发现:
命令 -
$ ./so -c """Calling `./so -g 5`"""
输出
Created resource..Calling Retrieved 5 resources...
命令 -
$./so -c '''Calling `./so -g 5`'''
输出 -
Created resource..Calling `./so -g 5`
为什么最后一个按预期工作而不是其他工作?
PS我不知道这个问题的必要标签,请随时编辑。
解决方案
推荐阅读
- common-lisp - 为什么这个 with-gensyms 的实现会产生一个额外的逗号?
- reactjs - REACT-拖动事件触发多次(默认阻止)
- java - JavaFx 时间线表现怪异
- javascript - javascript中的两个假或(||)如何变为真?
- java - 使用Mybatis时处理PostgreSQL保留关键字的最佳方法是什么
- python - 交叉验证和测试数据的拟合和转换错误
- junit - org.mockito.MockingDetails.getMockHandler()Lorg/mockito/invocation/MockHandler
- oracle-apex - Dialog Return Item 值未返回
- pandas - 选择包含特定列表值的行值
- custom-fields - 对齐下拉菜单容器