簡體   English   中英

從 bash 腳本作為數組訪問 python 腳本返回值

[英]Accessing python script return value from bash script as an array

我有一個 bash 命令如下:

($(echo my-profiles --my-profiles pytest))

上面的 bash 命令從 python 腳本返回一個數組,如下所示:

['mock-alchemy', 'pytest-mock', 'pytest-datafixtures', 'pytest-describe', 'pytest-unordered', 'requests-mock']

這個例子的答案中,我訪問的返回值如下:

dependencies=($(echo /path/to/my-script.py --my-profiles pytest}))

當我從dependencies訪問返回值時,我得到以下結果:

> echo ${dependencies[0]}
my-profiles

我怎樣才能得到'mock-alchemy'而不是上述結果?

我的 python 腳本如下:

my-script.py
def main():
    parser = argparse.ArgumentParser(description='My script')
    parser.add_argument('--tox-profiles', dest="profiles", 
                        type=str,
                        default='')
    parsed_args = parser.parse_args()
    dependencies = get_dependencies(args.profiles)

def get_dependencies(profiles):
    return ['mock-alchemy', 'pytest-mock', 'pytest-datafixtures', 'pytest-describe', 'pytest-unordered', 'requests-mock']

($(echo my-profiles --my-profiles pytest))

(... )執行一個子shell。 然后$(... )執行echo 命令echo輸出my-profiles --my-profiles pytest 然后$(...)的結果進行分詞擴展my-profiles --my-profiles pytest被分成三個詞my-profiles --my-profiles pytest 然后拆分的結果就像“重新掃描”一樣,變成了新的命令來執行,所以執行了my-profiles 它實際上輸出程序的 output 。

這一切都令人費解。 只需運行my-profiles --my-profiles pytestecho在那里做什么?

 dependencies=($(echo my-profiles --my-profiles pytest))

dependencies=(... )是一個數組賦值。 首先將$(...)替換為里面命令的output。 echo my-profiles --my-profiles pytest輸出my-profiles --my-profiles pytest 然后結果my-profiles --my-profiles pytest是單詞拆分,變成 3 個單詞,每個單詞分配給一個單獨的數組元素。

我怎樣才能得到“模擬煉金術”而不是上述結果?

如果您打算在機器上使用它們,您應該以機器可讀格式 output 工具中的數據。 因為它們很容易,你可以 output 例如空格分隔的數據。

def get_dependencies(profiles):
    return ' '.join([
       'mock-alchemy', 'pytest-mock', 'pytest-datafixtures', 'pytest-describe', 'pytest-unordered', 'requests-mock'
       ])

# actually print it too!
print(get_dependencies(None))

然后您可以讀取 bash 中的空格分隔值:

output=$(my-profiles --my-profiles pytest)
IFS=' ' read -r -a arr <<<"$output"
declare -p arr
echo "${arr[0]}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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