2016-06-26 10 views
2

私はgit pre-commitフックを書いていますが、ユーザ入力が必要で、フックは対話型端末では実行されません。 Pythonでは、私はこれを使ってユーザ入力にアクセスできます:stdinを/ dev/ttyで上書きする方法は?

#!/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さん@我々は標準入力を再定義する方法を働いてきたことで:

、私は信じて、ちょうど FileDescriptor#reopen

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

STDIN,STDOUTおよびSTDERRはすべてこのように再オープンすることができます。

0

これは動作するようです:

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

あなたはSTDINを再割り当てすることはできませんし、我々はそれのために再割り当てグローバル変数を持っていません。私はこれについてはあまりよく分かりません。おそらく、再オープンして、dupをそのために使うことができます。しかし、それ以外の場合はSTDINの代わりにfileを使用することができます。

+0

お返事いただきありがとうございました。もう1つはSTDINを再割り当てする方法を見つけました。私の答えを見てください。 – masukomi

1

あなたは試みることがあります。

STDIN.reopen("/dev/tty") 
関連する問題