2012-01-11 1 views
1

에 반환 값을 인쇄 os.system을()를 방지하는 방법 :내가 다른 bash는 스크립트를 실행 떠들썩한 파티를 호출하는 파이썬을 사용하고 파이썬

begin = int(sys.argv[1]) 
result = os.system("/tesladata/isetools/cdISE.bash %s" %begin) 

내가 result를 인쇄 한 후를, 그뿐만 아니라 나에게 출력을 제공합니다 반환 상태 (0 여기). 출력 만 필요한 경우 어떻게해야합니까?

또한 호기심 때문에 파이썬에서 bash를 호출하는 방법은 몇 가지가 있습니까? 누군가가 나에게 그것들을 사용하는 방법에 대한 약간의 언급을 줄 수 있다면 나는 기뻐할 것이고, 나는 단지 os.system()os.popen()을 발견했다.

+0

두 번째 질문은 여기에서 논의되었습니다 (http://stackoverflow.com/questions/3479728/is-it-good-style-to-call-bash-commands-within-a-python-script-using-os- systemb) 및 (http://stackoverflow.com/questions/4256107/running-bash-commands-in-python) 여기 – Bry6n

답변

7

사실 result은 정수로만 반환됩니다. 당신이 호출하는 것은 프로그램에서 상속받은 stdout에 쓴다. 그래서 즉시 출력되는 것을 볼 수있다. 그것은 당신의 프로그램에 결코 이용 가능하지 않습니다. 추가 정보를 서브 프로세스 모듈 문서 밖으로

확인 :

http://docs.python.org/library/subprocess.html

출력을 캡처하고, 다른 방법으로 쉘을 호출 포함.

+4

는 특히, 보이는 –

3

/dev/null으로 배관하면 출력을 버릴 수 있습니다. 당신도 오류를 표시하지 않으려면

begin = int(sys.argv[1]) 
result = os.system("/tesladata/isetools/cdISE.bash %s > /dev/null" %begin) 

>2&>에뿐만 아니라 stderr을 폐기하도록 변경.

2

귀하의 파이썬 스크립트는 bash 스크립트의 결과를 전혀 가지고 있지 않지만, 단지 "0"만 리턴합니다. bash 스크립트의 출력은 python 스크립트와 동일한 출력 스트림으로 보내졌으며 결과 값을 인쇄하기 전에 인쇄되었습니다. 0을보고 싶지 않은 경우 결과를 인쇄하지 마십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 당신이 옳았다 고 생각하지만, 만약 bash 스크립트로부터 결과를 얻고 그것을 다른 곳에 저장하고 싶다면 어떻게해야할까요? –

+0

@dazhuangcao 당신은 출력을 원하는 경우, 일은 os.popen 사용하거나 그가 [subprocess.check_output] (http://docs.python.org/library/subprocess.html#subprocess.check_output) 원 같은 서브 프로세스 –