gpt4 book ai didi

Python 子进程命令执行卡住

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:10 26 4
gpt4 key购买 nike

我遇到一个问题,即使用 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 bug:http://bugs.python.org/issue19809)。

对排序过程发出 strace 显示它被卡在 futex 上。不幸的是,我无法重现这个问题,而且我没有输入文件。当手动终止排序进程时,它返回(当然有一个错误)。

我正在使用 gnu coreutils 8.10

最佳答案

这不可能是 python 问题,因为这一切都发生在子 shell 内,并且 Python 不知道它是一个文件名。

事实上,sort 命令输出其输出文件以供写入并清空它。如果同时是输入文件,你就输了。

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

关于Python 子进程命令执行卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com