У меня есть Баш скрипт, который считывает переменную из окружения, а затем передает его в сценарий питона, как этотBash передача строки аргумент питона сценария
#!/usr/bin/env bash
if [ -n "${my_param}" ]
then
my_param_str="--my_param ${my_param}"
fi
python -u my_script.py ${my_param_str}
корреспондент питона сценария выглядеть следующим образом
parser = argparse.ArgumentParser(description='My script')
parser.add_argument('--my_param',
type=str,
default='')
parsed_args = parser.parse_args()
print(parsed_args.description)
Я хочу предоставить строку с тире символов «Some - string» в качестве аргумента, но она не работает через скрипт bash, но вызов непосредственно через командную строку работает нормально.
export my_param="Some -- string"
./launch_my_script.sh
выдает ошибку unrecognized arguments: -- string
и python my_script.py --my_param "Some -- string"
работает хорошо. Я попытался сыграть с nargs и избежать my_param_str="--my_param '${my_param}'"
таким образом, но оба решения не помогли. Любое обходное решение для этого случая? Или другой подход, как справиться с этим?
'--' обозначает конец аргументов для команды в обычном случае. – sjsam
Вы должны ** всегда ** использовать двойные кавычки для расширений параметров Bash, если вы явно не хотите, чтобы Bash выполнял разбиение слов ... и вы, вероятно, не хотите разделить слово. :) См. [BashGuide] (http://mywiki.wooledge.org/BashGuide/Practices#Quoting) и [ShellCheck] (http://www.shellcheck.net). –
Посмотрите на 'sys.argv', чтобы узнать, что' bash' дает ваш скрипт. 'argparse' может анализировать только строки в этом списке. – hpaulj