我正在运行一个带有文本的脚本" rAh%19u ^ l \& G"即包含特殊字符的内容。
当我在脚本中将此文本作为参数传递时,它运行正常,没有任何错误。
示例 - :dtMSDate = rs.Fields(1).Value
以上文字基本上是一个密码。
现在,当我将我的值放在配置文件中并阅读上述文本时,脚本失败。
******* abc.ini *******
./abc.py <username><pwd>
它说
[DEFAULT]
username = rahul
pwd = rAh%19u^l\&G
借助config parser
阅读上述值******以下是程序abc.py ******
/bin/sh:M command not found.
我尝试了很多,但没有找到具体的东西。
所以问题是如何读取包含.ini文件中特殊字符的文本。
答案 0 :(得分:7)
看起来%
字符是问题所在。如果您使用ConfigParser
,它具有特殊含义。如果你没有使用插值,那么只使用RawConfigParser
,否则你必须通过加倍来逃避%
。
当我尝试使用ConfigParser
的示例文件时,会出现以下异常:
InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%19u^l\\&G"'
如果我将ConfigParser
替换为RawConfigParser
,一切都会好的。
您发布的错误与此无关。我们甚至无法判断它是python异常还是shell错误消息。请使用完整的错误消息更新您的问题。您还可以want to check the sh
module,更高级别的subprocess
包装。
答案 1 :(得分:1)
您可以使用相同的字符转义特殊字符。例如,要读取%,您必须将其写入%%
答案 2 :(得分:0)
添加Paulo Scardine的评论。
如果您有特殊字符需要处理,可以将ConfigParser
的{{1}}参数设置为interpolation
,这样就不会再有错误了。 None
默认将ConfigParser
设置为interpolation
。
您可以在此处了解更多信息: https://docs.python.org/3.6/library/configparser.html#interpolation-of-values
此外,根据文档BasicInterpolation()
是RawConfigParser
这里是一个片段:
示例:
Legacy variant of the ConfigParser with interpolation disabled by default and unsafe add_section and set methods.
在上面的示例中,将插值设置为BasicInterpolation()的ConfigParser会将[Paths]
home_dir: /Users
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures
解析为%(home_dir)s
的值(在这种情况下为/ Users)。 home_dir
实际上将解析为%(my_dir)s
。 [....]
在将插值设置为/Users/lumberjack
的情况下,解析器将简单地返回None
作为%(my_dir)s/Pictures
的值和my_pictures
作为%(home_dir)s/lumberjack
的值。
答案 3 :(得分:0)
我遇到了同样的问题。可以理解,答案已经发布。根据这篇文章中每个人的评论,我通过以下方式解决了这个问题:
我的密码是 Sgf%ts54hhGtrf&yhgf
我使用的 alembic ini 文件:sqlalchemy.url = driver://myuser:Sgf%ts54hhGtrf&yhgf@localhost/my_application
收到错误:configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(',
通知我特殊字符是“%”
解决了这个问题,只需将密码用单引号括起来,然后按照本文评论中的建议将 % 符号加倍,最后得到:
sqlalchemy.url = driver://myuser:'Sgf%%ts54hhGtrf&yhgf'@localhost/my_application
无需担心更改 ConfigParser
,只要您坚持使用单引号将包含特殊字符的密码和在您收到的错误中发现的任何特殊字符加倍的规则来包装它,例如如果错误与 %
相关,则添加另一个并以 %%