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