2014-01-13 5 views
0

을 붙어있어 종류. 프로세스가 생성되는 방법은 :파이썬 서브 프로세스 명령 실행은 내가 파이썬 하위 프로세스 모듈과 실행 유닉스 명령이 붙어 문제가있는

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

답변

0

을 사용하고 있습니다.

실제로, sort 명령은 출력 파일을 출력용으로 출력하고이를 비 웁니다. 동시에 입력 파일이면 손실됩니다.

해결 방법은 모든 것을 임시 파일에 출력하고 이름을 바꿀 수 있습니다.

+0

디스크 사용에 대해 보수적이어야하므로 임시 파일을 사용하는 것이 최선의 방법은 아닙니다. sort 명령은 모든 것을 읽은 다음 파일에 쓰기 시작합니다. 그것은 gnu 정렬 문제 일지 모르지만, 나는 파이썬 버그를 배제 할 충분한 증거가 없다. 또한, 정렬이 병렬 모드에서 발행되지 않는다면, 나는 필요한 종류의 잠금을 얻지 못합니다. –

+0

@ShayanPooya 어쩌면 늦게까지 쓰기 시작하지만 분명히 파일은 아주 일찍 비워집니다. 모든 파이썬은 시스템 명령을 내린다. 말했듯이 파일에 액세스하는 것에 대한 개념은 없습니다. 어떻게해야합니까? – glglgl