Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在YAML文件中指定实际路径_Python_Yaml - Fatal编程技术网

Python 在YAML文件中指定实际路径

Python 在YAML文件中指定实际路径,python,yaml,Python,Yaml,我有一个YAML文件,它有一个目录路径(模板)。我想用波浪线表示应用程序执行的实际路径 test@devvm:/usr/local/superloop$ cat lib/database/templates.yaml --- - hardware_vendor: juniper type: vfirewall opersys: junos templates: - ~/superloop/lib/templates/hardware_vendors/juniper/ju

我有一个YAML文件,它有一个目录路径(模板)。我想用波浪线表示应用程序执行的实际路径

test@devvm:/usr/local/superloop$ cat lib/database/templates.yaml 
---
- hardware_vendor: juniper 
  type: vfirewall
  opersys: junos
  templates:
     - ~/superloop/lib/templates/hardware_vendors/juniper/junos/vfirewall/system.jinja2
     - ~/superloop/lib/templates/hardware_vendors/juniper/junos/vfirewall/snmp.jinja2
该应用程序可以安装在主目录或/usr/local/目录中。换句话说,它是动态的。我该怎么做


加载YAML文件时,是否类似于
os.path.dirname(os.path.realpath(_文件__))

- hardware_vendor: juniper 
  type: vfirewall
  opersys: junos
  templates:
     - ${MY_PATH}/superloop/lib/templates/hardware_vendors/juniper/junos/vfirewall/system.jinja2
     - ${MY_PATH}/superloop/lib/templates/hardware_vendors/juniper/junos/vfirewall/snmp.jinja2

这样,如果在调用使用YAML文件的程序之前设置$MY_PATH,那么所有正常的YAML解析器都会根据运行时环境中的内容为您替换变量。因此,您可以执行以下操作:将该变量导出到运行程序的shell中;或者,对于寿命较短(更动态)的解决方案,执行类似于处理yamls的
MY\u PATH=/something/over/here./MY\u executable\u的操作,它必须是一个tilde吗
~/
通常用于表示主目录,
/
用于当前目录。如果这些路径被更改为“/”相对路径,如果
os.path
已经做了正确的事情,我也不会感到惊讶。谢谢@Holloway,“.”确实有效。谢谢Sara。我要试一试!