2016-06-26 2 views
2

전 커밋 훅 (git pre-commit hook)을 작성하고 있지만 사용자 입력이 필요하며 대화 형 터미널에서 후크가 실행되지 않습니다. 파이썬을 사용하면 다음과 같이 사용자 입력에 액세스 할 수 있습니다./dev/tty로 stdin을 오버라이드하는 방법은 무엇입니까?

#!/usr/bin/python 

import sys 

# This is required because git hooks are run in non-interactive 
# mode. You aren't technically supposed to have access to stdin. 
# This hack works on MaxOS and Linux. Mileage may vary on Windows. 
sys.stdin = open('/dev/tty') 

result = input("Gimme some input: ") 

Crystal에서이 작업을 수행하는 적절한 방법은 무엇입니까?

답변

2

@의 줄리안-portalier의 답변을 결합하여 우리가 표준 입력 재정의하는 방식으로 작업 한 asterite 년대 @ :

STDIN.reopen(File.open("/dev/tty", "a+")) 

어느, 내가 믿는 단지 FileDescriptor#reopen

입니다

STDIN, STDOUTSTDERR은 모두이 방법으로 다시 열 수 있습니다.

0

이 작동하는 것 같다 :

file = File.open("/dev/tty") 
line = file.gets 
p line 

당신은 STDIN을 재 할당 할 수 없으며, 우리가 그것을 위해 재 할당 전역 변수가 없습니다. 나는 이것에 관해 많이 알지 못한다. 어쩌면 다시 열면 dup을 사용할 수있다. 하지만 그렇지 않다면 프로그램에 STDIN 대신 file을 사용할 수 있습니다.

+0

답장을 보내 주시면 감사하겠습니다. 다른 하나는 STDIN을 재 할당하는 방법을 찾았습니다. 내 대답을 보라. – masukomi

1

당신은 시도 할 수 있습니다 :

STDIN.reopen("/dev/tty") 
관련 문제