我使用Popen
执行一个子流程,并按如下方式输入(使用python2.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
的奇怪。在
这是查森的一只虫子。在运行Python时,可以看到以下syscalls-it问题:
即,它不能正确处理EOF。要解决这个问题,只需在Python字符串上添加一个换行符(
^{pr2}$'\n'
),如下所示:相关问题 更多 >
编程相关推荐