小编典典

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

python

我如何从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是否对查询进行编码…?

有什么想法吗?


阅读 338

收藏
2020-12-20

共1个答案

小编典典

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

在整个字符串之前使用“ 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}
2020-12-20