python - 将 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 list
URL 是否对查询进行编码或其他什么...?
想法?
解决方案
您遇到的主要问题似乎来自字符串中所需的引号。您可以使用格式指令和原始字符串将引号保留在字符串中。
在整个字符串之前使用 '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}
推荐阅读
- r - 将一列数据框添加到 R 中的现有数据框列?
- mysql - 使用mysql获取查询返回的总行数
- mongodb - mongoClient.connect VS mongoose.connect 在 MongoDB
- python - Python 数据框 if 和 for 语法错误
- python - Python通过特定列中的条件定义函数来子集数据帧
- java - 无法在 Java 中获得类似金字塔的图像
- python - 如何断开 Gmail API 服务实例?
- javascript - 我收到警告 Synchronous XMLHttpRequest without set async false
- html-table - 下面的 $row['imageData'] 代码不显示图像
- tensorflow - CUDA/TensorFlow 兼容性