将 Ipython 变量作为字符串参数传递给 shell 命令

Sea*_*ude 4 python shell ipython

如何从 Ipython/Jupyter notebook 执行 shell 命令,将 python 字符串变量的值作为 bash 参数中的字符串传递,如下例所示:

sp_name = 'littleGuy' #the variable

sp_details = !az ad app list --filter "DisplayName eq '$sp_name'" #the shell command
Run Code Online (Sandbox Code Playgroud)

我试过$sp_name单独使用${sp_name}{sp_name}等等,如this related question中所述,但都没有奏效。

这里的关键是变量名需要在 shell 命令中作为字符串引用。

编辑1:

@manu190466。我从字符串输出判断您的解决方案有效。出于某种原因,它在实践中似乎没有。我想知道az ad app listURL 是对查询进行编码还是什么......?

想法?

在此处输入图片说明

man*_*466 6

您遇到的主要问题似乎来自字符串中所需的引号。您可以使用格式指令和原始字符串将引号保留在字符串中。

在整个字符串之前使用一个 'r' 来表示它是作为原始字符串读取的,即:特殊字符不必被解释。在您的情况下,并不严格要求使用原始字符串,因为 python 的字符串构造函数能够在双引号声明中保留单引号,但我认为在其中包含非字母数字时使用原始字符串声明符是一个好习惯。

至少有两种格式化字符串的方法:

从带有 % 符号的古代语言中继承的旧方法:

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

sp_details = !az ad app list --filter {sp_query}
Run Code Online (Sandbox Code Playgroud)

带有 {} 符号和 format() 方法的较新方法:

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

sp_details = !az ad app list --filter {sp_query}
Run Code Online (Sandbox Code Playgroud)