2012-01-27 64 views
1

我正在開發需要在兩臺服務器上冗餘運行的R代碼。代碼的某些方面(如文件路徑或錯誤消息頁腳)需要特定於每個服務器。我寧願根據當前運行代碼的機器的主機名或IP來切換,而不是每個文件的服務器特定版本。如何如何根據本地主機或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值或一些類似的標識?

回答

4

好主機名通常可作爲環境變量:

# 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

謝謝! Sys.getenv實際上並沒有爲我工作(沒有設置這些值),但是它打開了Sys的窗口。我沒有意識到的功能家族。你的env變量解決方案的確很乾淨。我應該開始思考這些問題。 – 2012-01-27 19:03:56

+0

@SamSwift - 您可以隨時嘗試命名(Sys.getenv())'來查看定義了哪些環境變量。 – Tommy 2012-01-27 20:46:50

0

Tommy獲得信貸的答案,但我想記錄下它導致我的解決方案,只是略有不同。

Sys.info()返回一些關於平臺的變量。 nodename屬性返回「網絡上機器已知的名稱(如果有)」。

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

應該指出,Sys.info()「沒有在所有平臺上實現」,所以這不是完全可移植的。

+0

這也適用(在Linux主機上): 系統(「主機名」,實習生= T) – 2012-02-01 00:13:07