場景一:在jenkins上執行自動化任務,測試任務執行時使用jenkins使用者(有sudo權限),測試腳本在linux執行(後台),執行到以下程式碼時報錯:
os.system(f"/usr/bin/konsole -e {cmd_orin2_10s}")
場景二:測試腳本在本地執行沒有問題,本地執行時使用root用戶,可正常開啟命令視窗
錯誤日誌:
17:44:03 qt.qpa.xcb: could not connect to display 17:44:03 qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. 17:44:03 This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 17:44:03 17:44:03 Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, xcb.
解決方法:
從場景1和場景2可比較出,應該是由環境變量引起。從環境變數已經顯示視窗這兩方面去找問題,可找到 export DISPLAY=":0.0"
很多時候你用pycharm 用習慣了,啥都弄好了,但是卻忽略了很多路徑上的問題,偶爾需要和其他環境、平台互動的時候,例如寫了一個C# 程式去呼叫python 的藉口,就相當於terminal 傳參數啟動,這個時候就會顯示各種各樣的No module 問題解決辦法究其原因,是因為外部環境在調用python 介面的時候,要去你的程式中找各個module,但是如果這些module 還沒有加入到環境變數中,那麼就會找不到,因此推薦用下面的語句放在每個用到的py 檔案的最前頭
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../')
這樣的操作可以將目前檔案的上一層目錄整個新增到環境變數中,如此便可以輕鬆地呼叫上一層目錄下面的所有檔案啦
#如果你的目錄層級很多,目前的目錄在較深的位置,那麼你可以將這個指令稍微改一下,總之將你要使用的所有檔案和目錄包含進去即可,例如可以
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../')
當然如果你只想呼叫目前資料夾下的所有目錄,那麼就可以使用
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + './')
以上是linux下使用python開啟terminal時報錯如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!