Python子进程命令执行被卡住了

时间:2014-01-13 19:35:43

标签: python linux python-2.7 subprocess gnu-coreutils

我遇到一个问题,即使用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)

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

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

在排序过程中发出strace表明它被困在futex上。不幸的是,我无法重现此问题,我没有输入文件。当手动杀死排序过程时,它返回(当然有错误)。

我正在使用gnu coreutils 8.10

1 个答案:

答案 0 :(得分:0)

这不是一个python问题,因为它都发生在子shell中,Python并不认为它是一个文件名。

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

解决方案可能是将所有内容输出到临时文件中,然后重命名。

相关问题