我寫了一個名為的python函式plot_ts_ex,它接受兩個引數ts_file和ex_file(這個函式的檔案名是pism_plot_routine)。我想從終端的 bash 腳本運行這個函式。當我不在 bash 腳本中使用變數時,直接傳遞函式引數(在本例中為ts_file = ts_g10km_10ka_hy.ncand ex_file = ex_g10km_10ka_hy.nc),如下所示:
#!/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 函式類似,可以正常作業。
但是當我為輸入引數定義變數時,它不起作用:
#!/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")'
它給出了錯誤:
FileNotFoundError: [Errno 2] No such file or directory: b'$ts_name'
然后我發現了一個類似的問題,將引數從 bash 傳遞給 python 函式,用于只有一個引數的 python 函式,我嘗試了
#!/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 個引數?
uj5u.com熱心網友回復:
當您使用單引號時,變數不會被擴展,您應該使用雙引號:
#!/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_nameissys.arv[1]和ex_nameis sys.argv[2]:
#!/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"
uj5u.com熱心網友回復:
您將值$ts_name作為字串提供給 python,bash 對它不做任何事情。您需要關閉', 使其成為 bash 中的字串,然后再次打開它以使其成為 python 中的字串。
結果將是這樣的:
#!/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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432885.html
上一篇:如何使用proxy::dist應用自定義函式以在R中創建距離矩陣
下一篇:在python中用空格替換下劃線
