我在那里与蟒蛇子模块执行的UNIX命令把一个问题: (完整的代码是在这里: https://github.com/discoproject/disco/blob/master/lib/disco/worker/classic/func.py)Python的子命令执行卡住了
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的bug:http://bugs.python.org/issue19809)。
在排序过程中发布strace表明它被困在futex上。不幸的是,我还没有能够重现这个问题,我没有输入文件。当排序过程手动终止时,它返回(当然有一个错误)。
我使用GNU的coreutils 8.10
使用临时文件并不是最好的解决方案,因为我们必须对磁盘使用情况保守。排序命令保证读取所有内容,然后开始写入文件。这可能是GNU排序的问题,但我没有足够的证据来排除python的bug。另外,鉴于排序不是以并行模式发布的,我不知道它需要什么样的锁。 –
@ShayanPooya也许它开始写得很晚,但很明显,这个文件很早就被清空了。所有的Python都会发出系统命令。如上所述,它没有关于访问文件的概念。那该怎么办? – glglgl