Как перенаправить вывод в файл, если в Nim не обнаружена консоль - PullRequest
0 голосов
/ 22 января 2019

Я хочу, чтобы моя программа Nim записывала в консоль, если она есть, и перенаправила echo, чтобы записать в файл, если ее нет. Есть ли эквивалент. Environment.UserInteractive свойства в .NET, который я мог бы использовать, чтобы обнаружить, если консоль недоступна, и перенаправить стандартный вывод в этом случае?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Редактировать: @tjohnson это в ответ на ваш комментарий.У меня недостаточно очков, чтобы ответить на ваш комментарий или что-то еще?Спасибо, переполнение стека ...

Трудно сказать, не видя больше кода.

Какую версию Nim вы используете?

Я подозреваю, что stdout был затененсимвол только для чтения.

Вы вызываете этот код внутри процедуры и передаете stdout в качестве аргумента?например: proc foo(stdout: File)

Если это так, вам нужно изменить его на параметр var, чтобы сделать аргумент доступным для записи: proc test(stdout: var File)

Или использовать вместо него stdout в качестве глобальной переменной.

0 голосов
/ 24 января 2019

Это комбинация использования isatty() в соответствии с genotrance и кодом , который вы нашли:)

# stdout_to_file.nim 
import terminal, strformat, times

if isatty(stdout): # ./stdout_to_file
  echo "This is output to the terminal."
else:              # ./stdout_to_file | cat
  const
    logFileName = "log.txt"
  let
    # https://github.com/jasonrbriggs/nimwhistle/blob/183c19556d6f11013959d17dfafd43486e1109e5/tests/cgitests.nim#L15
    logFile = open(logFileName, fmWrite)
  stdout = logFile
  echo fmt"This is output to the {logFileName} file."
  echo fmt"- Run using nim {NimVersion} on {now()}."

Сохранить вышеуказанный файл как stdout_to_file.nim.

При запуске:

nim c stdout_to_file.nim && ./stdout_to_file | cat

Я получаю это в созданном log.txt:

This is output to the log.txt file.
- Run using nim 0.19.9 on 2019-01-23T22:42:27-05:00.
0 голосов
/ 22 января 2019

Вы должны использовать isatty () .

Вот пример на языке Limble.

...