[英]Python subprocess command execution got stuck
我遇到一个问题,其中用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错误: http : //bugs.python.org/issue19809 )。
在排序过程中发出strace表示它卡在了futex上。 不幸的是,我无法重现此问题,并且我没有输入文件。 手动终止排序过程后,它返回了(当然会出现错误)。
我正在使用gnu coreutils 8.10
这不可能是python的问题,因为这一切都是在子shell内发生的,并且Python根本不知道它是文件名。
实际上, sort
命令输出其输出文件以供写入并清空。 如果同时是输入文件,则会迷路。
一种解决方案是将所有内容输出到临时文件中,然后再重命名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.