IPython 笔记本:使用引号(') 和 dollar($) 在命令行中将字符串变量作为参数传递给 python 脚本(!) |例如:abc.py -arg1 '$var 1'



在使用笔记本单元的命令行中使用变量时,我看到我们可以在变量的前面使用$ put $,或使用{}来包围变量,例如

!command {variable}

!command $variable

但是,当我使用笔记本单元的命令行运行Python脚本时,我会得到错误

variable1 = '/path/to/directory'
variable2 = 7

!Script.py -arg1 $variable1 -arg2 $variable2

!Script.py -arg1 {variable1} -arg2 {variable2}

不起作用。

进行了一些实验后,我发现,如果变量是一个字符串,则用引号围绕整个arg围绕着它,就可以正常工作。

variable1 = '/path/to/directory'
variable2 = 7
!Script.py -arg1 '$variable1' -arg2 $variable2 

发生了什么事?我试图查找这种现象,但找不到任何东西。

如果有所不同,我正在使用Google Colab Colaboratory

您是否尝试过?

!Script.py -arg1 $variable1 -arg2 $variable2 

逐字传递以!字符开头的任何输入行(将!(传递给基础命令行接口。[来源]

!字符之后传递字符串变量仅通过字符串内容,而不会传递'(引号(符号。您需要在行中使用'(引号(符号包围字符串变量。


使用上面的示例,两个变量:

variable1 = '/path/to/directory'
variable2 = 7

运行此行时:

!Script.py -arg1 $variable1 -arg2 $variable2         #wrong

它将转化为

> Script.py -arg1 /path/to/directory -arg2 7

报价标记未传递给命令行。


因此,您需要在字符串变量周围添加引号:

!Script.py -arg1 '$variable1' -arg2 $variable2       #correct

将转化为

> Script.py -arg1 '/path/to/directory' -arg2 7

引用标记传递给命令行。该命令将正常工作并且您的观察正确。

最新更新