簡體   English   中英

當在python腳本內部調用shell腳本時,如何將變量從python傳遞給shell腳本

[英]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

  1. 我想知道correctBc4jfiles變量保存的文件數
  2. 我想迭代此變量correctBc4jfiles。 我將如何在Shell腳本中進行迭代。
  3. 我想將correctBc4jfiles變量的值分配給另一個屬於shell腳本本身的數組變量。
  4. 我們可以將多個變量從python傳遞到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM