首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用从.yml文件到.py文件的变量

如何使用从.yml文件到.py文件的变量
EN

Stack Overflow用户
提问于 2016-07-27 23:27:03
回答 1查看 6.1K关注 0票数 3

下面有两个文件,一个是.py文件,另一个是.yml文件,如图像所示。在.py文件中,我使用在.yml文件中定义的所有变量。现在,我正在寻找一个解决方案,说明如何传递这个.yml文件,或者如何调用或使用从.yml文件到.py文件的变量。我也用图像标记我的问题,以帮助正确理解我的问题。

任何建议都会很有帮助。

谢谢

下面的->是abcd.py文件

代码语言:javascript
运行
复制
# abcd.py

import pexpect
import os
import yaml
from yaml import load
from pexpect import pxssh
import pdb


with open('/home/asdf/Desktop/test.yml', 'rb') as f:
 var=yaml.load(f.read())

def example(gw_user,gw_password,gw_host):
  child = pexpect.spawn("ssh"+" "+gw_user+"@"+gw_host,timeout=30)
  child.expect('password')
  child.sendline(gw_password)
  #child.expect(self.gw_prompt)
  print 'connection established'
  child.expect('$')
  child.sendline('cd /usr/local/lib/python2.7/dist-packages/ostinato/')
  child.expect('ostinato')
  child.sendline('python example.py')
  print 'establishing connectivity with ostinato'
  child.expect('127.0.0.1')
  child.sendline('10.0.0.3')
  child.expect('Tx')
  child.sendline('1')
  child.expect('Rx')
  child.sendline('1')
  child.expect('$')
  child.sendline('exit')
  child.interact()
  #return self.gw_user
 #pdb.set_trace()
answer=example(var[Username],var[Userpassword],var[Hostname])
print (answer)

下面的->是test.yml文件

代码语言:javascript
运行
复制
---
- Username:
      - xyz
- Userpassword:
      - ubuntu 
- Hostname:
      - 10.0.0.3

也附上下面的截图,以更好地理解我的问题。

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 01:27:08

由于YAML文档的结构,yaml.load()返回一个字典列表:

代码语言:javascript
运行
复制
with open('test.yml') as f:
    var = yaml.load(f)

>>> var
[{'Username': ['xyz']}, {'Userpassword': ['ubuntu']}, {'Hostname': ['10.0.0.3']}]

这不是最有用的数据结构;不仅有一个单键字典的列表,而且值本身也是必须索引的列表,才能到达它们的内容。一本字典会更方便,因此,如果能够,您可以将YAML更改为:

代码语言:javascript
运行
复制
---
Username: xyz
Userpassword: ubuntu 
Hostname: 10.0.0.3

它表示一本词典:

代码语言:javascript
运行
复制
>>> var
{'Username': 'xyz', 'Userpassword': 'ubuntu', 'Hostname': '10.0.0.3'}

现在很容易将这些值传递给您的函数:

代码语言:javascript
运行
复制
answer = example(var['Username'], var['Userpassword'], var['Hostname'])

如果您无法更改YAML文件,那么您可以首先从数据中创建一个字典,然后使用它调用函数,如下所示:

代码语言:javascript
运行
复制
with open('test.yml') as f:
    var = yaml.load(f)
    var = {k:v[0] for d in var for k,v in d.items()}
    answer = example(var['Username'], var['Userpassword'], var['Hostname'])

在这里,行var = {k:v[0] for d in var for k,v in d.items()}是一种字典理解,它将单键字典列表转换为单个多键字典。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38624773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档