![](/img/trans.png)
[英]Pass the variables from python script to shell script when python script is being called inside shell script
[英]how to pass variable from python to shell script when shell script is getting called inside python script
場景:
我有一個名為bc4j.py
python bc4j.py
,它具有一個全局變量
correctBc4jfiles = []
此變量包含所有文件的列表
現在,我想在此python腳本以及該Shell腳本中調用另一個shell腳本,例如mail.sh
correctBc4jfiles
變量保存的文件數 correctBc4jfiles
變量的值分配給另一個屬於shell腳本本身的數組變量。 correctBc4jfiles
? 我怎樣才能做到這一點? 謝謝
僅傳遞一個參數,您可以使用如下所示的python腳本:
import subprocess
correctBc4jfiles = ["1","2","3"]
subprocess.call(["/bin/bash", "/path/to/mail.sh"] + correctBc4jfiles)
並具有如下所示的bash腳本:
#!/bin/bash
# I want to know the number of files the correctBc4jfiles variable holds
echo "$#"
# I want to iterate this variable correctBc4jfiles. how will i iterate it in shell script.
for A in "$@"; do
echo "$A"
done
# I want to assign the value of the correctBc4jfiles variable into another array variable which belongs to the shell script itself.
ANOTHER=("${@}")
# for A in "${ANOTHER[@]}"; do ...
我們可以將多個變量從python傳遞到shell腳本嗎? 就像在這種情況下,我們只傳遞一個變量correctBc4jfiles? 我怎樣才能做到這一點?
您必須使python腳本傳遞每個變量的值數量,例如:
import subprocess
var0 = ["|1|", "|2|", "|3|"]
var1 = ["|4|", "|5|", "|6|"]
subprocess.call(["/bin/bash", "script.sh"] + [str(len(var0))] + var0 + [str(len(var1))] + var1)
然后讓bash解釋一下:
#!/bin/bash
varprefix='var'
varindex=0
declare -i count
while [[ $# -gt 0 ]]; do
count=$1
if [[ count -gt 0 ]]; then
eval "${varprefix}$(( varindex++ ))=(\"\${@:2:count}\")"
shift "$count"
fi
shift
done
set | grep ^var ## Just show what variables were made.
它給出這樣的輸出:
var0=([0]="|1|" [1]="|2|" [2]="|3|")
var1=([0]="|4|" [1]="|5|" [2]="|6|")
varindex=2
varprefix=var
因此,您已經可以使用varX。
如果您不喜歡varX格式,則可以將值復制到所需的數組變量中:
myarray1=("${var0[@]}")
myarray2=("${var1[@]}")
您可以:
逐步瀏覽列表,然后為每個文件調用一次mail.sh
這是最可靠的方法。
將列表中的項目轉換為以空格分隔的字符串,然后將其傳遞給mail.sh
(假設mail.sh
的設置正確,它應該接受多個參數)。
您不能做的是將['a.txt','b.txt','c.txt']
批發傳遞給腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.