Передача переменных I python в качестве строковых аргументов команде оболочки - PullRequest
1 голос
/ 05 мая 2020

Как выполнить команду оболочки из записной книжки Ipython / Jupyter, передав значение строковой переменной python в виде строки в аргументе bash, как в этом примере:

sp_name = 'littleGuy' #the variable

sp_details = !az ad app list --filter "DisplayName eq '$sp_name'" #the shell command

I ' Мы пробовали использовать только $sp_name, ${sp_name}, {sp_name} и c, как указано в в этом связанном вопросе , но ни один из них не помог.

Кикер здесь заключается в том, что имя переменной должно быть указано в виде строки в команде оболочки.

EDIT1:

@ manu190466. Я судил по строковому выводу, что ваше решение сработало. Оказывается, на практике это почему-то не так. Интересно, кодирует ли az ad app list URL запрос или что-то в этом роде?

Мысли?

enter image description here

Ответы [ 3 ]

3 голосов
/ 09 мая 2020

Основная проблема, с которой вы сталкиваетесь, похоже, исходит из кавычек, необходимых в вашей строке. Вы можете сохранить кавычки в своей строке, используя инструкцию форматирования и необработанную строку.

Используйте 'r' перед всей строкой, чтобы указать, что она должна читаться как необработанная строка, ie: специальные символы не должны интерпретироваться. Необработанная строка в вашем случае строго не требуется, потому что конструктор строки python может сохранять одинарные кавычки в объявлении двойных кавычек, но я думаю, что это хорошая привычка использовать деклараторы необработанных строк, когда в нем нет буквенно-цифровых символов.

Существует как минимум два способа форматирования строк:

Старый метод, унаследованный от древних языков с символами%:

sp_name = 'littleGuy' #the variable
sp_query = r"DisplayName eq '%s'"%(sp_name) 

sp_details = !az ad app list --filter {sp_query}

Более новый метод с символами {} и форматом () метод:

sp_name = 'littleGuy' #the variable
sp_query = r"DisplayName eq '{}'".format(sp_name) 

sp_details = !az ad app list --filter {sp_query}
0 голосов
/ 10 мая 2020

Проблема также может быть решена с помощью следующего кода:

sp_name = 'littleGuy' #the variable
sp_details = !az ad app list --filter "DisplayName eq '{sp_name}'"
0 голосов
/ 09 мая 2020

не могли бы вы попробовать что-нибудь вроде этого:

sp_name = 'littleGuy' #the variable
sp_query = "DisplayName eq "+sp_name 

sp_details = !az ad app list --filter {sp_query}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...