Python: Configparser - 转义换行符?
Python: Configparser - escape newlines?
有没有办法使用 ConfigParser 转义换行符?
在配置中有这个选项--addons-path
,您可以在其中为插件提供多个路径,但是路径很长并且有很多路径,因此将所有内容写在一行中,看起来真的很糟糕。所以我想把插件路径放在多行中,但是 ConfigParser 不允许这样做。我收到此错误:
Starting odoo-server: Traceback (most recent call last):
File "/home/oerp/openerp80/odoo/openerp-server", line 5, in <module>
openerp.cli.main()
File "/home/oerp/openerp80/odoo/openerp/cli/__init__.py", line 68, in main
o.run(args)
File "/home/oerp/openerp80/odoo/openerp/cli/server.py", line 180, in run
main(args)
File "/home/oerp/openerp80/odoo/openerp/cli/server.py", line 140, in main
openerp.tools.config.parse_config(args)
File "/home/oerp/openerp80/odoo/openerp/tools/config.py", line 358, in parse_config
self._parse_config(args)
File "/home/oerp/openerp80/odoo/openerp/tools/config.py", line 403, in _parse_config
self.load()
File "/home/oerp/openerp80/odoo/openerp/tools/config.py", line 605, in load
p.read([self.rcfile])
File "/usr/lib/python2.7/ConfigParser.py", line 305, in read
self._read(fp, filename)
File "/usr/lib/python2.7/ConfigParser.py", line 546, in _read
raise e
ConfigParser.ParsingError: File contains parsing errors: /etc/odoo-server.conf
[line 3]: '/home/oerp/openerp80/addons,\n'
[line 4]: '/home/oerp/openerp80/community-addons\n'
有没有办法在多行中写入路径,但让 ConfigParser 将其视为一行(忽略换行符)?
更新
配置文件示例(有效):
someparam = blabla
; this is part I want to modify
addons_path = /some/dir1,/some/dir2,/some/dir3
; some other params
我想要的配置文件,但它不起作用:
someparam = blabla
; this is part I want to modify
addons_path = /some/dir1,
/some/dir2,
/some/dir3
; some other params
P.S。只要我可以将路径放在多行中,缩进就可以不同,所以它不会只是进入一长行。
如果将向 addons_path
参数添加信息的行缩进,它们将被解析为一个字符串。完整示例,值之间不需要逗号(我使用 StringIO
进行更好的演示,在大多数情况下,您将有一个文件对象):
import ConfigParser
import StringIO
config_as_string = '''
[something]
someparam = blabla
; this is part I want to modify
addons_path =
/some/dir1
/some/dir2
/some/dir3
; some other params
'''
config_as_file = StringIO.StringIO(config_as_string)
config = ConfigParser.ConfigParser()
config.readfp(config_as_file)
addons_path = config.get('something', 'addons_path')
那么addons_path
就是一个字符串:
>>> print addons_path
/some/dir1
/some/dir2
/some/dir3
如列表:
>>> addons_path.split()
['/some/dir1', '/some/dir2', '/some/dir3']
这些例子有帮助吗?我猜关键是缩进。
如果您要存储地图,我的建议是将内容存储在地图中
(或您的情况下的列表)并在获取后只需使用解析器读取定义的值
像这样:
[Section]
map1: {key: value,
key: value,
.
.
.
}
list1: [value1,
value2,
.
.
.
]
如果您只想让 ConfigParser 读取多行,就好像它们在引用 this post 的单行中一样:
它基本上指出:
ConfigParser _read() 方法的 .doc 字符串表示:
Continuations are represented by an embedded newline then leading whitespace.
这意味着您的解决方案将执行如下操作:
[SECTION]
param=
item1
item2
item3
注意:
这还没有经过测试,是从另一个 post 中重新引用的。
如果有人确认这有效,我将删除它
之前的答案是朝着正确方向迈出的一步。
在 Odoo 9 中它是这样工作的(您需要缩进行并保留逗号,但仍然可以在一行中包含多个路径。):
[options]
addons_path =
/some/dir1,
/some/dir2,/some/dir3,
/some/dir4,
/some/dir5
要在旧版本中实现此目的,您可以修改 odoo/openerp/tools/config.py
搜索这一行
os.path.abspath(os.path.expanduser(os.path.expandvars(x)))
并用这个替换它
os.path.abspath(os.path.expanduser(os.path.expandvars(x.strip())))
有没有办法使用 ConfigParser 转义换行符?
在配置中有这个选项--addons-path
,您可以在其中为插件提供多个路径,但是路径很长并且有很多路径,因此将所有内容写在一行中,看起来真的很糟糕。所以我想把插件路径放在多行中,但是 ConfigParser 不允许这样做。我收到此错误:
Starting odoo-server: Traceback (most recent call last):
File "/home/oerp/openerp80/odoo/openerp-server", line 5, in <module>
openerp.cli.main()
File "/home/oerp/openerp80/odoo/openerp/cli/__init__.py", line 68, in main
o.run(args)
File "/home/oerp/openerp80/odoo/openerp/cli/server.py", line 180, in run
main(args)
File "/home/oerp/openerp80/odoo/openerp/cli/server.py", line 140, in main
openerp.tools.config.parse_config(args)
File "/home/oerp/openerp80/odoo/openerp/tools/config.py", line 358, in parse_config
self._parse_config(args)
File "/home/oerp/openerp80/odoo/openerp/tools/config.py", line 403, in _parse_config
self.load()
File "/home/oerp/openerp80/odoo/openerp/tools/config.py", line 605, in load
p.read([self.rcfile])
File "/usr/lib/python2.7/ConfigParser.py", line 305, in read
self._read(fp, filename)
File "/usr/lib/python2.7/ConfigParser.py", line 546, in _read
raise e
ConfigParser.ParsingError: File contains parsing errors: /etc/odoo-server.conf
[line 3]: '/home/oerp/openerp80/addons,\n'
[line 4]: '/home/oerp/openerp80/community-addons\n'
有没有办法在多行中写入路径,但让 ConfigParser 将其视为一行(忽略换行符)?
更新
配置文件示例(有效):
someparam = blabla
; this is part I want to modify
addons_path = /some/dir1,/some/dir2,/some/dir3
; some other params
我想要的配置文件,但它不起作用:
someparam = blabla
; this is part I want to modify
addons_path = /some/dir1,
/some/dir2,
/some/dir3
; some other params
P.S。只要我可以将路径放在多行中,缩进就可以不同,所以它不会只是进入一长行。
如果将向 addons_path
参数添加信息的行缩进,它们将被解析为一个字符串。完整示例,值之间不需要逗号(我使用 StringIO
进行更好的演示,在大多数情况下,您将有一个文件对象):
import ConfigParser
import StringIO
config_as_string = '''
[something]
someparam = blabla
; this is part I want to modify
addons_path =
/some/dir1
/some/dir2
/some/dir3
; some other params
'''
config_as_file = StringIO.StringIO(config_as_string)
config = ConfigParser.ConfigParser()
config.readfp(config_as_file)
addons_path = config.get('something', 'addons_path')
那么addons_path
就是一个字符串:
>>> print addons_path
/some/dir1
/some/dir2
/some/dir3
如列表:
>>> addons_path.split()
['/some/dir1', '/some/dir2', '/some/dir3']
这些例子有帮助吗?我猜关键是缩进。
如果您要存储地图,我的建议是将内容存储在地图中 (或您的情况下的列表)并在获取后只需使用解析器读取定义的值
像这样:
[Section]
map1: {key: value,
key: value,
.
.
.
}
list1: [value1,
value2,
.
.
.
]
如果您只想让 ConfigParser 读取多行,就好像它们在引用 this post 的单行中一样:
它基本上指出:
ConfigParser _read() 方法的 .doc 字符串表示:
Continuations are represented by an embedded newline then leading whitespace.
这意味着您的解决方案将执行如下操作:
[SECTION]
param=
item1
item2
item3
注意: 这还没有经过测试,是从另一个 post 中重新引用的。 如果有人确认这有效,我将删除它
之前的答案是朝着正确方向迈出的一步。
在 Odoo 9 中它是这样工作的(您需要缩进行并保留逗号,但仍然可以在一行中包含多个路径。):
[options]
addons_path =
/some/dir1,
/some/dir2,/some/dir3,
/some/dir4,
/some/dir5
要在旧版本中实现此目的,您可以修改 odoo/openerp/tools/config.py
搜索这一行
os.path.abspath(os.path.expanduser(os.path.expandvars(x)))
并用这个替换它
os.path.abspath(os.path.expanduser(os.path.expandvars(x.strip())))