2014-11-14 5 views
2

내 코드는 다음과 같습니다파이썬 OS 출력

#!/usr/bin/python 

## print linux os command output 

import os 

p = os.popen ('fortune | cowsay',"r") 
while 1: 
    line = p.readline() 
    if not line: break 
    print line 

retvalue = os.system ("fortune | cowsay") 
print retvalue 

출력은 다음과 같습니다

______________________________________ 

< Stay away from flying saucers today. > 

-------------------------------------- 

     \ ^__^ 

     \ (oo)\_______ 

      (__)\  )\/\ 

       ||----w | 

       ||  || 

______________________________________ 
/Q: What happens when four WASPs find \ 
| themselves in the same room? A: A | 
\ dinner party.      /
-------------------------------------- 
     \ ^__^ 
     \ (oo)\_______ 
      (__)\  )\/\ 
       ||----w | 
       ||  || 
0 

내 질문

은 다음과 같습니다

  1. 을의 출력에서 ​​각 줄 끝에서 빈 줄이 왜 첫 번째는 cowsay이고 os.popen은?
  2. 왜 두 번째 유채 꽃의 출력 끝에 0이 추가됩니까 os.system? 대신 인쇄 라인의

답변

3

p.readline에 의해 반환 된 줄에는 이미 줄 바꿈 끝에 추가 된 줄 바꿈이 있습니다. print 함수는 새 줄을 추가하여 합계 2를 더합니다. 그래서 각 줄 사이에 빈 줄이있는 것입니다. print line.rstrip("\n")을 시도해보십시오.

os.system은 실행 된 명령의 종료 상태를 나타내는 숫자를 반환합니다. fortune | cowsay은 문제없이 종료되었으므로 종료 코드는 0입니다. 암소 및 말풍선은 print 기능에 의해 인쇄되지 않습니다. 그들은 system 호출 자체에 의해 stdout으로 전송됩니다. 0을 원하지 않으면 retvalue을 인쇄하지 마십시오.

+0

감사합니다. @kevin 귀하의 답변은 완벽하게 잘 작동했습니다. 새로운 Python과 아직 배우기. 도와 주셔서 감사합니다! 이 재미!! – 0x2

2

그대로, 말

print line.rstrip('\n') 

0으로부터 일을하려고하면 마지막에 당신의 print retvalue 때문이다.

+0

덕분에 @scott it worked! – 0x2