首页 > 解决方案 > 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我不知道这个问题的必要标签,请随时编辑。

标签: pythonpython-3.xargparse

解决方案


推荐阅读