Как переключить поведение в зависимости от локального хоста или IP - PullRequest
1 голос
/ 27 января 2012

Я занимаюсь разработкой кода R, который должен избыточно работать на двух серверах. Некоторые аспекты кода (например, пути к файлам или нижние колонтитулы сообщений об ошибках) должны быть специфичными для каждого сервера. Вместо того, чтобы иметь специфичные для сервера версии каждого файла, я бы предпочел переключаться на основе имени хоста или IP-адреса компьютера, на котором в данный момент выполняется код. Как мне

Я представляю что-то вроде этого

if(localIP == 123.45.678.9){
  msg = "Sent by server A"
} else if (localIP == 123.55.555.5) {
  msg = "Sent by server B"
} else {
  msg = "Default message"
}

Итак, как мне получить значение localIP или что-то подобное, идентифицирующее?

Ответы [ 2 ]

4 голосов
/ 27 января 2012

Ну и имя хоста обычно доступно как переменная окружения:

# Windows: COMPUTERNAME, Linux: HOST or HOSTNAME
host <- Sys.getenv(c("COMPUTERNAME", "HOST", "HOSTNAME"))
host <- unname(host[nchar(host)>0][1])

... Но, возможно, было бы лучше добавить переменную среды при запуске R:

R -f myscript.R myserver=A

Затем получите переменную env из вашего скрипта:

server <- Sys.getenv("myserver")
msg <- switch (server, A="Sent by server A", B="Sent by server B", "Default message")
0 голосов
/ 28 января 2012

Томми получает кредит за ответ, но я хотел задокументировать решение, к которому он меня привел, и немного другое.

Sys.info () возвращает количество переменных о платформе. Атрибут nodename возвращает «Имя, под которым машина известна в сети (если есть)».

host <- Sys.info()["nodename"]

Следует отметить, что Sys.info () "не реализован на всех платформах", поэтому он не является полностью переносимым.

...