을 붙어있어 종류. 프로세스가 생성되는 방법은 :파이썬 서브 프로세스 명령 실행은 내가 파이썬 하위 프로세스 모듈과 실행 유닉스 명령이 붙어 문제가있는
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)
입력 파일 비었다. 이 명령을 호출하기 전에 파일이 비어 있지 않았습니다 (인쇄 됨).
질문은 이것이 파이썬 문제인 경우 어떻게 파일을 비울 수 있는지입니다. (하나의 가설은 파이썬 2.7 버그입니다 : http://bugs.python.org/issue19809).
정렬 과정에서 strace를 발행하면 퓨 텍스에 붙어있는 것으로 나타났습니다. 불행히도이 문제를 재현 할 수 없었고 입력 파일이 없습니다. 정렬 프로세스가 수동으로 종료되면 반환됩니다 (물론 오류가 있음).
나는 모두가 서브 쉘 내에서 발생하고 파이썬은 어떠한 파일 이름이라고하는 개념이없는 것처럼 이것은, 파이썬 문제가되지 않을 수 GNU로 coreutils 8.10
디스크 사용에 대해 보수적이어야하므로 임시 파일을 사용하는 것이 최선의 방법은 아닙니다. sort 명령은 모든 것을 읽은 다음 파일에 쓰기 시작합니다. 그것은 gnu 정렬 문제 일지 모르지만, 나는 파이썬 버그를 배제 할 충분한 증거가 없다. 또한, 정렬이 병렬 모드에서 발행되지 않는다면, 나는 필요한 종류의 잠금을 얻지 못합니다. –
@ShayanPooya 어쩌면 늦게까지 쓰기 시작하지만 분명히 파일은 아주 일찍 비워집니다. 모든 파이썬은 시스템 명령을 내린다. 말했듯이 파일에 액세스하는 것에 대한 개념은 없습니다. 어떻게해야합니까? – glglgl