gpt4 book ai didi

python - 当 shell 脚本在 python 脚本中被调用时,如何将变量从 python 传递到 shell 脚本

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:23 25 4
gpt4 key购买 nike

场景:

我有一个名为 bc4j.py 的 Python 脚本,它有一个全局变量

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[@]}")

关于python - 当 shell 脚本在 python 脚本中被调用时,如何将变量从 python 传递到 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18502456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com