2015-01-20 3 views
0

내 C 프로그램에서 오류가 발생합니다. 나는 printf를 단지 프리셋 문자열을 출력하고 파일로 리다이렉트했다. 그리고 여분의 문자들은 여전히 ​​거기에 있었다. 나는 아직도 왜 그런지 모르겠다.이상한 문자가 추가 된 파이썬 파일 출력

안녕하세요 저는 평행선을 만들고있는 C 프로그램에서 분석을 실행하는 파이썬 스크립트를 작성하고 있습니다. 지금 쓰십시오. 사용 된 프로세서 수와 테스트라고하는 별도의 파일로 C 프로그램에 전달하려는 반복 횟수가 있습니다. 필자는 파이썬에 매우 익숙합니다. 결과는 .csv 파일로 채워지는 파일에 어떻게 쓰는지 알아 내기 위해 작성한 샘플 코드입니다. 내가 "인쇄 결과는"기대와 내가 3.14blablablablawhatever를 얻을으로 출력이 나오는 표준 출력 할 때 지금

#!/usr/bin/env python 
import subprocess 
mpiProcess = "runmpi" 
piProcess = "picalc" 

tests = open("tests.txt") 
analysis = open("analysis.txt", "w") 

def runPiCalc (numProcs, numIterations): 
    numProcs = str(numProcs) 
    numIterations = str(numIterations) 
    args = (mpiProcess, piProcess, numProcs, numIterations) 
    popen = subprocess.Popen(args, stdout=subprocess.PIPE) 
    popen.wait() 
    output = popen.stdout.read() 
    return output 

def runTest (testArgs): 
    testProcs = testArgs[0] 
    testIterations = testArgs[1] 
    output = runPiCalc(testProcs,testIterations) 
    appendResults(output) 

def appendResults (results): 
    print results 
    analysis.write(results + '\n') 

for testLine in tests: 
    testArgs = testLine.split() 
    runTest(testArgs) 

tests.close() 
analysis.close() 

내 문제입니다. analysis.txt 파일을 확인할 때 pi 계산이 나타나기 전에 모든 행의 시작 부분에 [H [2J (웹상의 ESC로 인코딩되지 않은 이상한 문자)를 얻습니다. 나는 그것이 왜 있는지를 알 수 없다. 왜 file.write는 print와 다른 출력을 가지게 될까요? 다시 이것은 파이썬을 처음 사용 한 것입니다. 그래서 나는 쉽게 뭔가를 놓치고있을 것입니다.

이것은 우분투 서버에 있습니다. 나는 btw를 사용하고 있습니다.

다음은 tests.txt와 문자가 리눅스 characters and test

+0

믹스에 비 ASCII 문자가 있습니까? 터미널에 대한 인쇄는 암시 적으로 비 ASCII 문자를 유니 코드로 올바르게 인코딩하지만 출력은 파일로 리디렉션 할 때 명시 적으로 사용해야합니다. –

+0

나는 안된다. 내가 c로 인쇄 한 것은 모두 double입니다 : printf ("% .30f", endPI); 내 파이썬 스크립트에서 stdout 출력을 얻은 다음 다시 인쇄합니다. ASCII가 아닌 문자가 어디에서 오는 것인지 알 수 없습니다. –

+0

"tests.txt"를 제공 할 수 있습니까? 및 "[H [2J (웹상에 ESC로 인코딩되지 않은 이상한 문자)" –

답변

0

문제는 내가 내 C 프로그램을 실행하는 bash는 스크립트를 가지고 있었다에서 어떻게 보이는지의 사진입니다. bash 스크립트는 프로그램 출력 전에 이상한 문자를 삽입하여 표준 출력에 추가했습니다. 파이썬 스크립트 내에서 직접 호출하는 명령을 넣는 대신 bash 스크립트를 호출하여 문제를 해결했습니다.

+0

해결 되었습니까? –