2012-07-20 2 views
0

서브 프로세스를 사용하여 출력을 데이터 파일에 쓰고, 그 데이터를 분석하여 데이터를 검사하려고합니다. 그러나 파일의 행을 통해 읽어야 할 때 파일을 닫은 다음 다시 열지 않으면 항상 공백 파일이 나타납니다. 그것이 작동하는 동안, 나는 단지 이것을하는 것을 좋아하지 않고 왜 그것이 일어나는지를 알고 싶습니다. 하위 프로세스 또는 파일 모드의 또 다른 복잡성에 문제가 있습니까? 내가 파일을 읽으려고하면이 시점에서 읽기 전에 서브 프로세스 파일 출력을 닫아야합니다.

dumpFile=open(filename,"w+") 
dump = subprocess.Popen(dumpPars,stdout=dumpFile) 
dump.wait() 

는, 나는 아무것도 얻을 수 없다.

는 블록이 끝나는 with 문이 자동으로 파일을 닫
dumpFile.close() 
dumpFile=open(filename,"r") 

답변

1

당신은 아마 다시 파일의 시작 부분에 seek 필요

dumpFile.seek(0) 

을 그러나 actua에 필요하지 않은 경우 : 당신이 그것을 읽을 때, 그렇지 않으면 파일 포인터는 파일의 마지막에 될 것입니다 명령은 많은 양의 데이터를 생성하지 않는

dump = = subprocess.Popen(dumpPars,stdout=subprocess.PIPE) 
stdoutdata,_ = dump.communicate() #now parse stdoutdata 

: 에서야이 같은 뭔가를 아마 더 나은, dumpFile를 저장합니다.

2

후 : 그러나,이 후이 명령을 수행하여 잘 작동

with open(filename, "w+") as dumpFile: 
    dump = subprocess.Popen(dumpPars, stdout=dumpFile) 
    dump.wait() 

with open(filename, "r") as dumpFile: 
    # dumpFile reading code goes here 
0

당신이, 당신이 이미 작성한 것을 가까운 하나를 읽고 파일을 다시, 또는 "되감기"하려는 경우 -이 기록되는 동안 파일을 읽으려면 0

을 상쇄하고자 , 그렇게 할 수 있습니다 (디스크에 쓰지 않아도 됨).이 다른 질문을 참조하십시오. Capture output from a program

관련 문제