我正在编写一个git pre-commit挂钩,但它需要用户输入并且挂钩不能在交互式终端中运行。使用Python,我可以做这样的事情来访问用户输入:
#!/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中执行此操作的适当方法是什么?
答案 0 :(得分:2)
通过结合@ julian-portalier的答案和@ asterite,我们有办法重新定义stdin:
STDIN.reopen(File.open("/dev/tty", "a+"))
我认为,这只是FileDescriptor#reopen
STDIN
,STDOUT
和STDERR
都可以通过这种方式重新打开。
答案 1 :(得分:1)
您可以尝试:
STDIN.reopen("/dev/tty")
答案 2 :(得分:0)
这似乎有效:
file = File.open("/dev/tty")
line = file.gets
p line
您无法重新分配STDIN,我们没有可重新分配的全局变量。我对此知之甚少,可能会重新打开并且可以使用dup。但是,我想你可以在你的程序中使用file
而不是STDIN
。