繁体   English   中英

Python子流程命令执行陷入困境

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM