簡體   English   中英

Python:Configparser-轉義換行符?

[英]Python: Configparser - escape newlines?

有沒有一種方法可以使用ConfigParser來換行?

config中有--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

PS縮進可以有所不同,只要我可以將路徑放在多行中,那么它就不會只是排成一行。

之前的答案是朝正確方向邁出的一步。

在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())))

如果縮進將信息添加到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讀取多行,就像它們位於單行中一樣,則引用此文章

它基本指出:

ConfigParser _read()方法的.doc字符串表示:

Continuations are represented by an embedded newline then leading whitespace.

這意味着您的解決方案將執行以下操作:

[SECTION]
param=
  item1
  item2
  item3

注意: 這未經測試,是另一篇文章的引文。 如果有人確認可以使用,我將刪除它

暫無
暫無

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

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