簡體   English   中英

從bash腳本訪問python字典

[英]accessing python dictionary from bash script

我正在從python腳本調用bash腳本。

我希望bash腳本在python腳本中向字典“ d”添加元素

abc3.sh

#!/bin/bash
rank=1
echo "plugin"
function reg()
{
    if [ "$1" == "what" ]; then
        python -c 'from framework import data;data(rank)'
        echo "iamin"
    else
        plugin
    fi
}

plugin()
{
    echo "i am plugin one"
}

reg $1

python文件:

 import sys,os,subprocess
    from collections import *
    subprocess.call(["./abc3.sh what"],shell=True,executable='/bin/bash')

    def data(rank,check):
       d[rank]["CHECK"]=check
    print d[1]["CHECK"]

如果我理解正確,則您有一個運行shell腳本的python腳本,而該腳本又運行了一個新的python腳本。 並且您希望第二個Python腳本更新第一個腳本中的字典。 那將不會那樣工作。

當您運行第一個python腳本時,它將創建一個新的python進程,該進程將解釋源腳本中的每條指令。

當到達指令subprocess.call(["./abc3.sh what"],shell=True,executable='/bin/bash') ,它將產生一個新的shell(bash)進程,該進程將依次解釋您的外殼腳本。

當shell腳本到達python -c <commands> ,它將調用一個新的python進程。 此過程與初始python過程無關(即使您運行相同的腳本文件)。

由於這些腳本中的每個腳本都將在不同的進程中運行,因此它們無法訪問彼此的數據(操作系統確保每個進程彼此獨立,但特定的進程間通信方法除外)。

您需要做的是:使用某種進程間機制,以便初始python腳本從shell腳本獲取數據。 例如,您可以使用https://docs.python.org/3/library/subprocess.html#subprocess.check_output從Shell標准輸出中讀取數據。

假設您有一個回顯該值的shell插件:

echo $1 12

樣機python腳本看起來像(我在Windows / MSYS2 BTW上,因此對於Linux用戶來說是奇怪的路徑):

import subprocess

p = subprocess.Popen(args=[r'C:\msys64\usr\bin\sh.exe',"-c","C:/users/jotd/myplugin.sh myarg"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
o,e= p.communicate()
p.wait()
if len(e):
    print("Warning: error found: "+e.decode())

result = o.strip()
d=dict()
d["TEST"] = result
print(d)

它打印字典,證明參數已傳遞給外殼,並返回處理。 請注意,stderr已被過濾掉以避免與結果混淆,但是如果發生,它將被打印到控制台。

{'TEST': b'myarg 12'}

暫無
暫無

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

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