Reputation: 4415
How do I execute a shell command from Ipython/Jupyter notebook passing the value of a python string variable as a string in the bash argument like in this example:
sp_name = 'littleGuy' #the variable
sp_details = !az ad app list --filter "DisplayName eq '$sp_name'" #the shell command
I've tried using $sp_name
alone, ${sp_name}
, {sp_name}
etc as outlined in this related question, but none have worked.
The kicker here is the variable name needs to be quoted as a string in the shell command.
EDIT1:
@manu190466. I was judging from the string output that your solution worked. It appears for some reason it does not in practice. I wonder if az ad app list
URL encodes the query or something...?
Thoughts?
Upvotes: 8
Views: 8228
Reputation: 146630
The issue can be also resolved using something like below
sp_name = 'littleGuy' #the variable
sp_details = !az ad app list --filter "DisplayName eq '{sp_name}'"
Upvotes: 0
Reputation: 1603
The main problem you encounters seems to come from the quotes needed in your string. You can keep the quotes in your string by using a format instruction and a raw string.
Use a 'r' before the whole string to indicate it is to be read as raw string, ie: special caracters have to not be interpreted. A raw string is not strictly required in your case because the string constructor of python is able to keep single quotes in a double quotes declaration but I think it's a good habit to use raw string declarators when there are non alphanumerics in it.
There are at least two way to format strings :
Older method herited from ancient langages with % symbols:
sp_name = 'littleGuy' #the variable
sp_query = r"DisplayName eq '%s'"%(sp_name)
sp_details = !az ad app list --filter {sp_query}
Newer method with {} symbols and the format() method :
sp_name = 'littleGuy' #the variable
sp_query = r"DisplayName eq '{}'".format(sp_name)
sp_details = !az ad app list --filter {sp_query}
Upvotes: 14
Reputation: 711
would you try something like this:
sp_name = 'littleGuy' #the variable
sp_query = "DisplayName eq "+sp_name
sp_details = !az ad app list --filter {sp_query}
Upvotes: 0