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
将引号传递给命令行。该命令将正常工作,您的观察是正确的。
相关文章