2012-06-12 2 views
0
str = "blah -l" 
    cpuinfo = subprocess.Popen(str.split(),stdout=PIPE,stderr=PIPE) 

    tuples = cpuinfo.communicate() 

위 코드에서 str = [some_valid_command]는 출력을 튜플에 제공합니다. 잘못된 명령을 내리면 오류가 PIPE로 전달 될 것으로 예상되지만 콘솔에서는 여전히 예외가 발생합니다. ... 내가 잘못 이해 한 부분은 확실하지 않습니다. ...파이썬 하위 프로세스에서 stderr = PIPE를 출력 함에도 불구하고 외부로 출력 함.

감사합니다 .....

답변

1

stderr이 콘솔에 실제로 나타나는지, 또는 예를 실행할 때 생성되는 "blah"라는 프로세스를 생성하는 Python 오류가 발생하고 있는지 확실하지 않습니다. 당신이 한 것으로 ... 예제의

출력은 파이썬이 실행 스크립트가 PATH에 "ㅋ"라는이없는 경우 예상 할 수있는 OSError: [Errno 2] No such file or directory을 높이는 것

,

나는 간단한 테스트를했고,이 같은 bash는 스크립트를 썼다, 나는 당신의 예를 반복 대신 내 스크립트 (로컬 디렉토리의 이름 fail.sh)라고 해당 스크립트의 실행 권한을 부여 후

#!/bin/bash 

echo "This is stdout" 
echo "This is a failure on stderr" >&2 
exit 1 

을 그러한 :

import subprocess 

cmd = './fail.sh' 
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
proc.communicate() 

이것은 예상대로 ('This is stdout\n', 'This is a failure on stderr\n')을 반환했습니다.

아마도 여기에서 실제로보고있는 것은 어떤 프로그램을 호출하든 (그것이 아니라고해도) PATH에 존재하지 않는다는 것입니다.

또한 str을 파이썬에서 레이블로 사용하는 것에 대한 참고 사항은 기본 제공 유형이므로 내장 변수를 "과부하"하고 싶지 않으면 변수 또는 함수의 이름으로 사용하면 안됩니다. 기능. 클래스 인 string에 대해서도 마찬가지입니다.