Как мне написать на консоль независимо от того, использует ли пользователь `|` или `>` операторы на оболочке? - PullRequest
2 голосов
/ 28 декабря 2011

Я написал программу на Ruby и записывал все данные в консоль с помощью puts.

Если я запускаю my.rb из консоли, я могу перенаправить поток в файл как с > и |.

Как изменить стандартный вывод для записи данных в консоль Windows?

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Если вы пытаетесь отличить реальный «вывод» и сообщения об ошибках, которые должен видеть пользователь, вы можете вместо этого отправить вывод на стандартный вывод ошибок с чем-то вроде:

$stderr << 'oh noes!'

Стандартный вывод ошибок перенаправляется независимо от стандартного вывода.

3 голосов
/ 28 декабря 2011

Вся идея этих символов заключается в том, чтобы позволить пользователям вашего приложения перенаправить вывод в нужное место. Это полезно для регистрации, фильтрации и любого числа других приложений, где вы хотите, чтобы выходные данные одной программы были входными данными другой программы или файла. Это облегчает межпроцессное взаимодействие, которое зачастую невозможно в противном случае.

По сути, если вы не можете более четко определить причину , которую вы хотите сделать (в конкретном случае, когда это полезно и желательно), вы не должны пытаться делать это, и я не уверен, что это даже возможно потому что эти символы работают на уровне оболочки. Я не думаю, что в рамках Ruby есть что-то, что вы можете сделать, что будет иметь какое-либо влияние на то, куда идет вывод. Оболочка (после того, как она уже вышла из вашей программы Ruby) захватывает этот вывод и перенаправляет его. К этому моменту эти данные / выходные данные уже не контролируются вашим приложением Ruby.

...