在python中从.ini文件读取特殊字符文本
我正在运行一个脚本,该脚本包含一个文本“rAh%19u^l\&G”,即包含如图所示的特殊字符 当我将此文本作为参数传递到脚本中时,它运行良好,没有任何错误 示例-:在python中从.ini文件读取特殊字符文本,python,configparser,Python,Configparser,我正在运行一个脚本,该脚本包含一个文本“rAh%19u^l\&G”,即包含如图所示的特殊字符 当我将此文本作为参数传递到脚本中时,它运行良好,没有任何错误 示例-:/abc.py 上面的文字基本上是一个密码 现在,当我将值放入配置文件并读取上面的文本时,脚本失败 *******abc.ini******* [DEFAULT] username = rahul pwd = rAh%19u^l\&G 上面说 /bin/sh:M command not found. 在配置解析器的帮助下
/abc.py
上面的文字基本上是一个密码
现在,当我将值放入配置文件并读取上面的文本时,脚本失败
*******abc.ini*******
[DEFAULT]
username = rahul
pwd = rAh%19u^l\&G
上面说
/bin/sh:M command not found.
在配置解析器的帮助下读取上述值
******下面是程序abc.py******
#! /usr/bin/python
parser = configparser.ConfigParser()
parser.read('abc.ini')
username = parser.get('DEFAULT','username')
pwd = parser.get('DEFAULT','pwd')
p = subprocess.Popen(
"abc.py {0} {1}" .format(username, pwd),
shell=True,
stdout=subprocess.PIPE
)
out, err = p.communicate()
print(out)
我试着找了很多,但没有找到任何具体的东西
因此,问题是如何读取.ini文件中包含特殊字符的文本。看起来这里的问题是
%
字符。如果您使用的是ConfigParser
,则它具有特殊意义。如果不使用插值,则只使用RawConfigParser
,否则必须将%
加倍以转义
当我使用ConfigParser
尝试示例文件时,它将爆炸,出现以下异常:
InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%19u^l\\&G"'
如果我将ConfigParser
替换为RawConfigParser
一切正常
你发布的错误与此无关。我们甚至不知道这是python异常还是shell错误消息。请用完整的错误消息更新您的问题。您还可以在
子流程
上添加一个更高级别的包装,以添加Paulo Scardine的评论
如果需要处理特殊字符,可以将ConfigParser
的interpolation
参数设置为None
,这样就不会再有错误了<默认情况下,code>ConfigParser将插值设置为BasicInterpolation()
您可以在此处阅读更多关于此的信息:
此外,根据文档RawConfigParser
是ConfigParser的一个传统变体,默认情况下插值被禁用,并且不安全的add\u部分和set方法。
下面是其中的一个片段:
例如:
[Paths]
home_dir: /Users
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures
在上面的示例中,插值设置为BasicInterpolation()的ConfigParser将%(home\u dir)s
解析为home\u dir
(在本例中为/Users)%(my_dir)s
实际上将解析为/Users/lumberjack
。[……]
当插值设置为None
时,解析器只需返回%(my_dir)s/Pictures
作为my_Pictures
的值,返回%(home_dir)s/lumberjack
作为my_dir
的值,您可以用相同的字符转义特殊字符。例如,为了能够读取%,您必须将其写入%%不要在问题中使用反勾号格式化代码。相反,缩进4个空格(带前导换行符)。您可以通过突出显示您的代码并按下顶部的{}
按钮来自动执行此操作。您是否尝试过在pwd=“rAh%19u^l\\&G”中引用它,或者在pwd=“rAh%19u^l\\&G”中转义反斜杠
-btw,用户名和pwd
的值是多少,你能在调用另一个脚本之前打印它们吗?@PauloScardine-我用反斜杠尝试了rAh%19u^l\\&G,但没有成功。我没有尝试引用它。但是,在引用时,它不会将引用也作为完整的文本??尝试一下,然后告诉我们…:-)@PauloScardine我诚挚的道歉将在下次发布问题时非常小心。正如建议的那样,“rAh%19u^l\&G”和pwd=“rAh%19u^l\&G”都不起作用。我将使用RawConfigParser,然后分享我的结果……非常感谢您的回答。这起作用了。我从上个星期开始搜索这个。RawConfigParser工作得很好。我们很高兴能为您服务,陛下。正如@Ativerc所提到的,它是“ConfigParser的一个遗留变体,默认情况下禁用插值,并且不安全的add_部分和set方法。”parser=ConfigParser(interpolation=None)
如何使用单个引号”
?我在文件夹名称中有一个撇号,但configparser似乎无法解析它