在使用笔记本单元的命令行中使用变量时,我看到我们可以在变量的前面使用$ 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
引用标记传递给命令行。该命令将正常工作并且您的观察正确。