簡體   English   中英

虛擬機(AWS EC2實例)上的R tcltk2進度欄錯誤

[英]R tcltk2 progress bar error on virtual machines (AWS EC2 instance)

我編寫的R函數在EC2實例上運行時導致我出現問題。 它使用tcltk2程序包創建進度條以監視功能進度。 在桌面實例上運行良好的方法在EC2上返回以下錯誤:

Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : 
  [tcl] invalid command name "toplevel".
In addition: Warning message:
In fun(libname, pkgname) : couldn't connect to display ":0"

我猜問題是EC2沒有“顯示”,因此不知道如何處理彈出的進度條窗口。 我想知道是否有一種方法可以解決此問題而不完全禁用進度欄。

如果您不需要與顯示器上的任何內容交互,而只需讓應用程序代碼顯示其進度條,則最簡單的方法是將無頭X服務器(可能是Xvfb )放在EC2實例上。 這將允許Tcl端的Tk包自身進行初始化,從而使事情在R端起作用。

否則,如果要通過ssh訪問EC2實例,則可以使用X轉發來允許進度條在本地系統上運行。 顯然,要使其正常工作,您將需要運行本地X服務器,該服務器在某些平台上非常容易,而在其他平台上確實很尷尬,並且必須在其他地方更好地回答這個問題。 您可能還可以使用VNC遠程桌面 ,盡管我在使用它們方面的經驗要少得多。

如果這些都不起作用,並且GUI部分實際上只是一個進度條和其他雜項,則必須進入並編輯代碼以擺脫GUI部分。 您可以在本地進行操作。 第一步可能是禁用tcltk程序包的加載(查找library("tcltk")並刪除它),然后遍歷並修復(可能通過策略性刪除)所有library("tcltk")的部分。 希望那不會太多! 還要記住,您可能很幸運,發現正在使用的代碼只是一個GUI包裝器,它只是對其他東西進行了設置,並設置了參數並提供了監視; 對於無頭的工作,您可以沒有監視,也可以只在控制台上顯示“ 我還沒死 ”消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM