유닉스 커맨드 라인에서 파이썬 프로세스에 글을 쓰고 있습니다. EOF를 보내고 싶습니다 (또는 어떻게해서 stdin 버퍼를 플러시하여 파이썬이 입력을 읽을 수 있도록).EOF를 명령 행에서 Python sys.stdin으로 보내는 방법은 무엇입니까? CTRL-D가 작동하지 않습니다.
Ctrl-C를 누르면 KeyboardError가 발생합니다.
CTRL-D를 누르면 프로그램이 중지됩니다.
표준 버퍼를 어떻게 플러시합니까?
유닉스 커맨드 라인에서 파이썬 프로세스에 글을 쓰고 있습니다. EOF를 보내고 싶습니다 (또는 어떻게해서 stdin 버퍼를 플러시하여 파이썬이 입력을 읽을 수 있도록).EOF를 명령 행에서 Python sys.stdin으로 보내는 방법은 무엇입니까? CTRL-D가 작동하지 않습니다.
Ctrl-C를 누르면 KeyboardError가 발생합니다.
CTRL-D를 누르면 프로그램이 중지됩니다.
표준 버퍼를 어떻게 플러시합니까?
'for l in sys.stdin'을 사용하면 버퍼링됩니다.
당신은 사용할 수 있습니다
while 1:
l = sys.stdin.readline()
어쨌든 버퍼링되었습니다. 둘 사이에는 차이가 없습니다. –
사실, 위는 나를 위해 일했습니다. 메일 링리스트에서 sys.stdin.readline()이 아니라면 'sys.stdin'에서 여분의 내부 버퍼를 갖고 있다고 읽었습니다. –
@JasonOrendorff : 실제로 [read-ahead buffer bug] (http://bugs.python.org/issue3907)로 인해 Python 2에서 차이점이 있습니다. 'iter in line (for sys.stdin.readline, '') :'을 사용하여 회피 할 수 있습니다. 'cat | python2 -u -c "
제어-D이 프로그램이 "그만"해서는 안 -는 표준 입력을 닫아야하고, 그와 함께 프로그램 거래는 제대로, 그것은 완벽하게하면 계속하는 경우 그것은 필요합니다! 프로그램 -
import sys
def main():
inwas = []
for line in sys.stdin:
inwas.append(line)
print "%d lines" % len(inwas),
print "initials:", ''.join(x[0] for x in inwas)
if __name__ == '__main__':
main()
우리가 볼 수있는 일
$ python st.py
nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura
che la diritta via era smarrita
3 lines initials: nmc
$
같은 제어-D는 세 번째 행에 입력 한 후 바로 히트 경우 :
st.py
을 다음 주어진 예를 들어
, 표준 입력이 완료되었음을 인식하고 필요한 모든 후 처리를 수행합니다.
프로그램이 컨트롤 -D에서 조기에 종료되는 경우 잘못 코딩해야합니다. 문제의 편집에 대해 생각할 수있는 가장 작은 "오작동"프로그램을 추가하는 것은 어떨까요? 잘못된?
나는 무슨 일이 일어나고 있는지 알고 있다고 생각합니다. enter
을 치지 않고 ctrl-D
을 치고 있습니다. 프로그램에 줄을 보내려면 enter를 누르십시오. enter
을 치지 않고 ctrl-D
을 누르는 경우 ctrl-D
을 다시 칠 수 있으며 프로그램에 다음 줄이 표시됩니다. 이 경우 (연속해서 두 개의 ctrl-D
) 행의 끝에 개행 문자가 표시되지 않습니다. 예를 들어
,의 내가 파이썬 스크립트 a.py
있다고 가정 해 봅시다 :
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
을 그리고 나는 그것을 실행합니다
$ python a.py
을 그리고 다음을 입력 :
line 1
line 2<ctrl-D><ctrl-D>
프로그램 인쇄 할 것입니다 :
line 1
line 2$
$
은 쉘 프롬프트입니다. 위의 입력 내용과 전체 세션은 다음과 같습니다.
$ python a.평
라인 1
라인이 1 호선
라인이 $
ctrl-D
의 입력 한 내용 표시하기위한 것입니다 보여줍니다)
이것이 일어나지 않는 경우, 현재 수행중인 작업에 대해 더 자세히 알려야합니다.
try:
# You might be inside the while-loop
foo = raw_input('Spam: ') # Or whatever...
except EOFError:
print 'And now for something completely different.'
sys.exit()
Enter 키를 누르면 바로 입력이 파이썬에 전송됩니다. –
작동 방식을 바꾸고 싶다면, 파이썬은 터미널 설정을 변경해야합니다. 이것은 검은 마법입니다 ... 아마도'termios' 모듈을 보십니까? http://docs.python.org/library/termios.html –