2

我正在编写一个 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 中执行此操作的适当方法是什么?

4

3 回答 3

2

通过结合@julian-portalier 的答案和@asterite 的答案,我们可以重新定义标准输入:

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

我相信,这只是FileDescriptor#reopen

STDIN, STDOUT, 并且STDERR都可以通过这种方式重新打开。

于 2016-06-28T15:35:06.650 回答
1

你可以试试:

STDIN.reopen("/dev/tty")
于 2016-06-27T07:28:20.713 回答
0

这似乎有效:

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

您不能重新分配 STDIN,我们也没有可重新分配的全局变量。我对此了解不多,也许重新打开和 dup 可以用于此。但否则你可以使用它file而不是STDIN在你的程序中,我猜。

于 2016-06-26T23:12:53.553 回答