2012-12-11 2 views
3

open ("file", "a")을 사용하여 파일에 쓰는 경우 설명서에 따르면 새 데이터가 추가되지만 아래 예제에서는 두 번째 명령이 덮어 씁니다 파일. 나는 왜 그런지 모르겠다.Python open + append가 예상대로 작동하지 않습니다.

import subprocess 

startupinfo = subprocess.STARTUPINFO() 
subprocess.STARTF_USESHOWWINDOW = 1 
startupinfo.dwFlags = subprocess.STARTF_USESHOWWINDOW 

with open(r"c:\folder\test.txt","a") as log: 
    Process = subprocess.Popen(['dir'], 
           stdout = log, stderr = log, 
           startupinfo = startupinfo, 
           shell=True) 

with open(r"c:\folder\test.txt","a") as log: 
    Process = subprocess.Popen(['dir'], 
           stdout = log, stderr = log, 
           startupinfo = startupinfo, 
           shell=True) 

이미 "a + b"모드를 시도했지만 동일한 결과를 얻었습니다.

답변

4

subprocess 내에 파일 위치가 증가하지 않습니다. log.tell()with 두 번째 문에 0을 반환합니다. 파일 끝에 log의 위치를 ​​입력 할 수 있습니다. 그리고 첫 번째 Process에 대해서는 wait() 인 것 같습니다. 나를 위해 작품을 다음과 같습니다

import subprocess 
from os import linesep, stat 

with open(r"test.txt","a") as log: 
    Process = subprocess.Popen(['dir'], 
           stdout = log, stderr = log, 
           shell=True) 
    Process.wait() 

with open(r"test.txt","a") as log: 
# this prints 0 
    print log.tell() 
# get the length of the file log 
    pos = stat(r"test.txt").st_size 
    print pos 
# go to the end of log 
    log.seek(pos) 
    Process = subprocess.Popen(['dir'], 
           stdout = log, stderr = log, 
           shell=True) 
+2

가되지 않을 것''log.seek (0, io.SEEK_END)''(와''수입 io'')'사용하는 것보다 더 우아한'stat''? 아니면 어떤 이유로 여기에서 일하지 않습니까? –

+0

당신이 맞을 것 같네요. 나는'seek()'의 두 번째 선택적 매개 변수에 대해 몰랐다. – Holger

+0

좋아요! 죄송합니다. 잠깐 잊어 버렸습니다. 코드는 실제로 더 복잡합니다. 필자가 의미하는 바를 보여주기 위해 필요한 최소한의 코드를 게시했습니다. 그냥 호기심을 벗어나서 버그가 아닌가? 내 말은 내가 "a"로 열면 어떻게 든 파일의 끝에 있어야한다는 것입니다. – Mac

관련 문제