首页 > 解决方案 > 将 Ipython 变量作为字符串参数传递给 shell 命令

问题描述

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

sp_name = 'littleGuy' #the variable

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

我已经尝试过$sp_name单独使用${sp_name},{sp_name}等,如相关问题中所述,但没有一个有效。

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

编辑1:

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

想法?

在此处输入图像描述

标签: pythonshellipython

解决方案


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

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

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

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

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

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

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

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

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

推荐阅读