在使用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(文件名,sort_buffer_size):返回(r“-z -T‘\xff’-k 1,1 -T. -S {0} -o {1} {1}”.format(sort_buffer_size,filename),True)
排序命令的输入文件(也是输出文件)为空。在调用此命令之前,文件不是空的(它是打印的)。
问题是,如果这是python问题,那么文件怎么可能是空的。(一个假设是这个python2.7bug:http://bugs.python.org/issue19809)。
在排序过程中发出暂停显示它被卡在一个futex上。不幸的是,我无法重现这个问题,也没有输入文件。当手动终止排序进程时,它会返回(当然有一个错误)。
我正在使用gnu coreutils 8.10
发布于 2014-01-13 19:53:13
这不可能是python问题,因为这一切都发生在子subshell中,Python根本不知道它是一个文件名。
实际上,sort命令输出它的输出文件以编写并清空它。如果同时是输入文件,则会丢失。
解决方案可以是将所有内容输出到一个临时文件中,然后将其重命名。
https://stackoverflow.com/questions/21099839
复制相似问题