问问题
1226 次
2 回答
3
你想避免echo
在这种情况下使用;而是将您的输入直接写入对象的stdin
管道。Popen()
请确保您的环境设置为正确的语言环境,以便grep
知道将输入解析为 UTF-8:
env = dict(os.environ)
env['LC_ALL'] = 'en_US.UTF-8'
p = subprocess.Popen(['grep', '-E', mainconf["MSG_FORMAT"][msgtype,fieldname]], stdin=subprocess.PIPE, env=env)
p.communicate(datarecord[fieldname])
if p.returncode:
return fieldname
于 2013-03-24T15:13:52.507 回答
0
只是为了补充 Martijn Pieters 的答案,他建议的解决方案在输入字符串为空的情况下将失败(与原始函数不同,即使正则表达式允许,grep 也将无法匹配空字符串)。因此,原始功能的完整实现将是:
if (msgtype,fieldname) in mainconf["MSG_FORMAT"]:
if not datarecord[fieldname]:
if not regex.search(mainconf["MSG_FORMAT"][msgtype,fieldname],datarecord[fieldname],regex.UNICODE):
return fieldname
else:
curenv = os.environ
curenv['LC_ALL']="en_US.UTF-8"
check = subprocess.Popen(['grep','-E', mainconf["MSG_FORMAT"][msgtype,fieldname]], stdin=subprocess.PIPE, env=curenv, stderr=subprocess.STDOUT,stdout=subprocess.PIPE)
check.communicate (datarecord[fieldname])
if check.returncode:
return fieldname
return None
这可以作为regex
匹配在空字符串上正常工作。
于 2013-03-26T05:09:09.217 回答