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

问题描述

在从笔记本单元格的命令行中使用变量时,我看到我们可以在变量前面放一个$,或者使用{}将变量括起来,例如

!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协作


解决方案

任何以!字符开头的输入行将逐字传递(不包括!)到基础命令行界面。[source]

!字符后传递字符串变量将只传递字符串内容,而不会传递'(引号)符号。 您需要在行中用'(引号)将字符串变量括起来。


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

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

将引号传递给命令行。该命令将正常工作,您的观察是正确的。

相关文章