首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个参数从bash (在变量中)传递给python函数

将多个参数从bash (在变量中)传递给python函数
EN

Stack Overflow用户
提问于 2022-02-25 12:51:27
回答 2查看 386关注 0票数 2

我编写了一个名为plot_ts_ex的python函数,它包含两个参数ts_fileex_file (该函数的文件名是pism_plot_routine)。我想从终端的bash脚本中运行这个函数。当我不使用bash脚本中的变量时,直接传递函数参数(在本例中是ts_file = ts_g10km_10ka_hy.ncex_file = ex_g10km_10ka_hy.nc),如下所示:

代码语言:javascript
复制
#!/bin/sh
python -c 'import pism_plot_routine; pism_plot_routine.plot_ts_ex("ts_g10km_10ka_hy.nc", "ex_g10km_10ka_hy.nc")'

这类似于在Run function from the command line中,这是可行的。

但是,当我为输入参数定义变量时,它不起作用:

代码语言:javascript
复制
#!/bin/sh 
ts_name="ts_g10km_10ka_hy.nc" 
ex_name="ex_g10km_10ka_hy.nc" 
python -c 'import pism_plot_routine; pism_plot_routine.plot_ts_ex("$ts_name", "$ex_name")'

它给出了错误:

代码语言:javascript
复制
FileNotFoundError: [Errno 2] No such file or directory: b'$ts_name'

然后,我发现了一个类似的问题,passing an argument to a python function from bash用于一个只有一个参数的python函数,然后我尝试了

代码语言:javascript
复制
#!/bin/sh
python -c 'import sys, pism_plot_routine; pism_plot_routine.plot_ts_ex(sys.argv[1])' "$ts_name" "$ex_name"

但这不管用。

那么,如何使用变量在bash脚本中传递python函数的2个参数呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-25 13:03:37

当您使用单引号时,变量将不会展开,您应该使用双引号:

代码语言:javascript
复制
#!/bin/sh 
ts_name="ts_g10km_10ka_hy.nc" 
ex_name="ex_g10km_10ka_hy.nc" 
python -c "import pism_plot_routine; pism_plot_routine.plot_ts_ex('$ts_name', '$ex_name')"

您也可以使用sys.argv,参数存储在列表中,所以ts_namesys.arv[1]ex_namesys.argv[2]

代码语言:javascript
复制
#!/bin/sh 
ts_name="ts_g10km_10ka_hy.nc" 
ex_name="ex_g10km_10ka_hy.nc" 
python -c 'import sys, pism_plot_routine; pism_plot_routine.plot_ts_ex(sys.argv[1], sys.argv[2])' "$ts_name" "$ex_name"
票数 3
EN

Stack Overflow用户

发布于 2022-02-25 13:01:50

如果将值$ts_name作为字符串提供给python,bash不会对其做任何操作。您需要关闭',以便它在bash中成为一个字符串,然后再次打开它,使它成为python中的一个字符串。

结果会是这样的:

代码语言:javascript
复制
#!/bin/sh 
ts_name="ts_g10km_10ka_hy.nc" 
ex_name="ex_g10km_10ka_hy.nc" 
python -c 'import pism_plot_routine; pism_plot_routine.plot_ts_ex("'$ts_name'", "'$ex_name'")'

对于这样的问题,使用一些较小的代码来测试它通常是很好的,我使用python3 -c 'print("${test}")'来找出它传递给python的内容,而不需要pism_plot的麻烦。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71266145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档