当stdin包含unicode时,Popen子进程不退出

2024-04-29 22:40:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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的奇怪。在


Tags: 命令行env脚本编码方式args流程all
1条回答
网友
1楼 · 发布于 2024-04-29 22:40:51

这是查森的一只虫子。在运行Python时,可以看到以下syscalls-it问题:

write(1, "\n", 1)                       = 1
read(0, "", 4096)                       = 0
write(1, "\n", 1)                       = 1
read(0, "", 4096)                       = 0

即,它不能正确处理EOF。要解决这个问题,只需在Python字符串上添加一个换行符('\n'),如下所示:

^{pr2}$

相关问题 更多 >