2012-02-09 3 views
0

일부 데이터를 구문 분석하고 파이썬으로 그래프를 만들려고하고 있는데 이상한 문제가 있습니다. os.system()에 대한 전화가 어딘가에 없어 질 것 같습니다.os.system() python에서 실패

다음 세 가지 라인 :

os.system('echo foo bar') 
os.system('gnuplot test.gnuplot') 
os.system('gnuplot --version') 

인쇄해야 :

foo bar 
Warning: empty x range [2012:2012], adjusting to [1991.88:2032.12] 
gnuplot 4.4 patchlevel 2 

하지만 중간에 유일한 중요한 명령이 떨어졌다받을 것으로 보인다. 이 스크립트는 여전히 에코와 버전 검사를 실행하고 만 실행하면 (gnuplot 쉘) 작동하지만 경고없이 gnuplot에서 파일을 출력하지 않습니다.

왜이 명령을 삭제 했습니까?

도움이 될 경우, 호출은 gnuplot을 시작해야합니다. 두 개의 파일 (지침과 여기에 표시된 데이터 파일)을 열고 SVG 파일에 기록해야합니다. 덮어 쓸 필요가 없으므로 아무 목표없이 파일을 삭제하려고했습니다.

이것은 2.6.38-8 가상 커널이있는 Ubuntu Natty x86_64 가상 시스템의 python 3.2입니다.

+0

os의 반환 코드를 확인하십시오.체계. 0 (성공)입니까? –

답변

2

그래서, 그것은 문제가 내가 언급하지 못한 것이었다 밝혀졌다. 이전에 test.gnuplot과 test.data 스크립트가 작성되었지만 파일 객체 'close()을 호출하고 닫혔는지 확인하지 않았습니다. (여전히 마지막 파트를 수행하는 방법을 모르므로 지금은 조금 순환합니다.). 따라서 gnuplot이 읽을 수없는 두 개의 파일을보고 아무런 조치도 취하지 않고 출력이없고 0을 반환하는 예기치 않은 동작이있었습니다.

아무도이 파일에 대한 점수를 얻지 못했을 것입니다.

편집 : 마침내 strace의 도움으로 알아 냈습니다. 내가 전에 어떻게했는지 모르겠다. learned how to use it.

1

경고가 stderr에 인쇄되어 어떻게 든 가로 채지는 않았습니까?

subprocess.check_output(cmd, stderr=subprocess.STDOUT) 

하여 상기 출력에 의하면, 예를 들어, 대신에 서브 프로세스를 사용하여 시도.

(또는 subprocess.call를 plaing을하는 os.system을보다 잘 작동 할 수 있습니다)

+1

참고로 서브 프로세스 문서 : http://docs.python.org/py3k/library/subprocess –

1

os.system를 사용하지 않습니다. subprocess module을 사용하십시오.

os.system documentation는 말한다 :

서브 프로세스 모듈은 새로운 프로세스를 산란하고 결과를 검색하기위한보다 강력한 기능을 제공합니다; 해당 모듈을 사용하는 것이 이며이 기능을 사용하는 것이 좋습니다.

이 시도 :

subprocess.check_call(['gnuplot', 'test.gnuplot']) 
관련 문제