Python子进程命令执行陷入停滞



我遇到一个问题,使用python子流程模块执行的unix命令被卡住:(完整代码如下:https://github.com/discoproject/disco/blob/master/lib/disco/worker/classic/func.py)

unix命令是一个简单的就地排序。创建流程的方式:

env = os.environ.copy()
env['LC_ALL'] = 'C'
cmd, shell = sort_cmd(filename, sort_buffer_size)
subprocess.check_call(cmd, env=env, shell=shell)

其中sort_cmd为:

def sort_cmd(filename, sort_buffer_size):
return (r"sort -z -t$'xff' -k 1,1 -T . -S {0} -o {1} {1}"
.format(sort_buffer_size, filename), True)

排序命令的输入文件(也是输出文件)为空。在调用此命令之前,文件不为空(已打印)。

问题是,如果这是一个python问题,文件怎么可能是空的。(一种假设是这个python 2.7错误:http://bugs.python.org/issue19809)。

在分拣过程中发出strace表明它卡在了蒲团上。不幸的是,我无法重现这个问题,而且我没有输入文件。当排序进程被手动终止时,它会返回(当然会有一个错误)。

我正在使用gnu coreutils 8.10

这不可能是python的问题,因为这一切都发生在子shell中,python根本不知道它是一个文件名。

事实上,sort命令输出它的输出文件进行写入并清空它。如果它同时是输入文件,则会丢失它。

一个解决方案可以是将所有内容输出到一个临时文件中,然后对其进行重命名。

最新更新