Argparse input выполняет команду, которая не должна - PullRequest
0 голосов
/ 04 ноября 2018

Я случайно наткнулся на это странное поведение, работая над проектом. Вот демонстрационный код, который будет воспроизводить ту же проблему -

#!/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 Я не знаю необходимых тегов для этого вопроса, пожалуйста, не стесняйтесь редактировать его.

...