我正在使用 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”的奇怪情况。
echo "悪妻は百年の不作。" | chasen -i u '-F"%m "'
,它能正常工作吗? - abarnert