문제

나는 이런 것을 시도하고있다

output.py

print "Hello"

입력 .py

greeting = raw_input("Give me the greeting. ")
print "The greeting is:", greeting

CMD 라인에서

Output.py | Input.py

그러나 그것은 반환합니다 eoferror. 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?

당신의 도움을 주셔서 감사합니다.

편집하다
패트릭 해링턴 해결책 작동하지만 왜 그런지 모르겠습니다 ...

도움이 되었습니까?

해결책

내 Windows 시스템에서 이것을 테스트했으며 Python exe를 지정하면 작동합니다.

C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello

그러나 명령을 직접 실행하는 경우 다음과 같이 직접 동체가됩니다.

output.py | input.py 

나는 그것이 왜 그런지 정확히 잘 모르겠습니다. 나는 여전히 이것을 조사하고 있지만 적어도 이것은 지금 당신에게 해결 방법을 제공해야합니다. .py 파일에 대한 파일 핸들러가 호출되는 방식과 관련이있을 수 있습니다.

업데이트: 글쎄, 당신은 무엇을 알고 있습니까? 이것은 실제로 파일 연관에서 시작했을 때 Stdin/stdout 리디렉션이 제대로 작동하지 않을 수있는 Windows의 버그 인 것 같습니다. 따라서 해결 방법은 나 자신과 Patrick에 의해 언급 된대로 "Python"이 input.py를 실행할 것을 지정해야합니다. 그렇지 않으면 stdout을 output.py에서 stdin으로 input.py로 올바르게 리디렉션하지 않습니다.

참조:

http://mail.python.org/pipermail/python-bugs-list/2004-august/024923.html

http://support.microsoft.com/default.aspx?kbid=321788

업데이트 2:

이 동작을 변경하고 Windows 파이프가 STDIN/STDOUT 리디렉션에 대해 예상대로 작동하도록하려면이 값을 레지스트리에 추가 할 수 있습니다 (내 상자에서 테스트하고 원하는대로 작동 함).

  1. 레지스트리 편집기 시작.
  2. 레지스트리에서 다음 키를 찾아서 다음 키를 클릭하십시오.

    hkey_local_machine 소프트웨어 Microsoft Windows CurrentVersion Policies Explorer

  3. 편집 메뉴에서 값 추가를 클릭 한 다음 다음 레지스트리 값을 추가하십시오.

    가치 이름 : 상인 컨 홀드
    데이터 형식: reg_dword
    RADIX : 소수점
    가치 데이터 : 1

  4. 레지스트리 편집기를 종료하십시오.

다른 팁

변경 :

Output.py | python Input.py

출력은 다음과 같습니다.

인사말을주세요. 인사말은 : 안녕하세요

다음은 eoferror를 얻는 이유입니다 (Raw_Input의 문서에서) :

그런 다음 함수는 입력에서 줄을 읽고 문자열로 변환 (후행 신형 줄무늬)로 변환하여 반환합니다. EOF가 읽히면 Eoferror가 제기됩니다.

http://docs.python.org/library/functions.html?highlight=Raw_Input#Raw_Input

사용하고 싶을 수도 있습니다 Sys.stdin, 읽기, 읽기 라인 메소드를 사용할 수있는 파일 객체를 제공합니다.

import sys
for greeting_line in sys.stdin.readlines():
    print "The greeting is:", greeting_line.strip()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top