我正在执行一个子进程Popen
,并按如下方式提供输入(使用 Python 2.7.4):
env = dict(os.environ)
env['LC_ALL'] = 'en_US.UTF-8'
args = ['chasen', '-i u', '-F"%m "']
process = Popen(args, stdout=PIPE, stderr=PIPE, stdin=PIPE, env=env)
out, err = process.communicate(input=string)
将条目添加到执行它的环境中是必要的,因为输入字符串包含日文字符,并且当脚本不是从命令行执行时(在我的情况下由 Apache 调用),Python 无法猜测编码。
这个设置对我使用其他命令效果很好,但是现在我正在使用chasen
(一个日语标记器),每当我向它发送 unicode 字符时,子进程都不会返回,它只是坐在那里,Python 脚本会占用内存。这似乎是一个编码问题,但我认为我可以通过使用LC_ALL
环境变量指定编码来解决这个问题。
编辑:额外的怪异如下......从命令行执行Python脚本时我没有遇到这个问题,除了'。'字符的显着例外。由于某种原因,这chasen
也导致了奇怪。