繁体   English   中英

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

[英]IPython notebook: using quotes(') and dollar($) to pass string variable as argument to python script in command-line(!) | eg: 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 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

引号被传递到命令行。 该命令将正常工作并且您的观察是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM