Argparse输入执行不应执行的命令

时间:2018-11-04 18:49:02

标签: python python-3.x 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`

为什么最后一个不能按预期工作,而其他却不能?

P.S我不知道此问题的必要标签,请随时对其进行编辑。

0 个答案:

没有答案