2011-08-19 3 views
-3

내가 할 :파이썬 os.dup 및 부작용 내 파이썬 스크립트의 시작 부분에서

if '-' in args: 
    fd = os.fdopen(os.dup(0)) 
    sys.stderr.write(fd.read()) 
    fd.close() 

나는이 내 프로그램의 나머지 부분의 동작에 영향을주지 것이라고 생각하지만,에, 즉 보인다 이 4 줄을 주석 처리하면 코드가 작동하지만 실행하면 예상치 못한 결과가 발생합니다 (문제 해결에 어려움이 있습니다).

os.dup를 잘못 사용하고 있습니까?

감사합니다.

+1

문제 해결에 어려움이있는 "예기치 않은 결과"를 설명하지 않고 질문이 불완전합니다. –

+0

전에이 패턴을 보았습니다! 그는 자신의 입력 내용을 엿보 으려하지만, 나머지 프로그램이 그것을 읽을 수 있기 전에 "사용"하지 않고있다. 나 자신의 유닉스 청소년에서 필자는 파일 기술자를 깨닫기 전에 한번 시도했다. *와 * 실제 파일은 두 가지 전혀 다른 것들입니까? :) –

답변

0

는 또한 os.dup()의 올바른 사용에 대한 확실하지 않다,하지만 예를 들어, 당신은 사용

if '-' in args: 
    sys.stderr.write(sys.stdin.read()) 

또는

print(input()) # for python 2.x it would be print raw_input() 
2

당신은 아아, 아니다, os.dup() 제대로 할 수 있었다. 분명히 표준 입력 스트림을 "앞을 내다보고"무엇이 보이는지 알아 내서 인쇄하고 나머지 프로그램을 시작하여 표준 입력에서 대기중인 동일한 입력을 계속 볼 수 있습니다. (디버깅 목적을 위해이 일을하는 것이 내 생각 엔 맞습니까?) 당신의 접근 방식에 문제가 os.dup()를 실행하는 것은 단순히 두 번째 파일 설명이 아닌 두 번째 파일 생성한다는 것입니다

- 즉을, 그것은 생성 입력 데이터의 소스를 참조 할 수있는 다른 정수이지만 dup()은 두 번째 실제 데이터 소스를 생성하지 않습니다. 따라서 첫 번째 파일 설명자 또는 두 번째 파일 설명 자의 read() 이건간에 입력 스트림의 모든 데이터를 "다 써 버렸"습니다.