簡體   English   中英

為什么 libvirt python 模塊停止我的腳本?

[英]Why libvirt python module stopping my script?

所以,我正在用 libvirt 模塊學習 python。 這是我制作的一個小腳本,用於檢查與 libvirtd 的連接是否成功建立並檢查一個域。 我不是開發人員,我正在走一些捷徑,所以我不明白 python 或 libvirt 模塊是如何工作的。 但是此時我真正的問題是,如果未建立連接或未找到域,為什么我的腳本會關閉。

    #!/usr/bin/env python3
    from __future__ import print_function
    import sys
   import libvirt

   domName = 'server1'

   conn = libvirt.open('qemu:///system')
   if conn == None:
        print('Failed to open connection to qemu:///system', file=sys.stderr)
        exit(1)
   else:
        print('Connection opened sucessfully')

   dom = conn.lookupByName(domName)
   if dom == None:
        print('Failed to find the domain '+domName, file=sys.stderr)
        exit(1)
   else:
        print('Domain '+domName+' was found')

   conn.close()
        exit(0)

例如,libvirtd 服務已停止且未建立連接,而是進一步深入到 if 語句中,它只是打印一些錯誤並停止,因此有一個 if 語句應該檢查這一點,但像這樣它沒有任何功能. 看起來像這樣

[root@localhost Documents]# ./virt.py 
libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
Traceback (most recent call last):
  File "./virt.py", line 11, in <module>
    conn = libvirt.open('qemu:///system')
  File "/usr/local/lib64/python3.6/site-packages/libvirt.py", line 277, in open
    if ret is None:raise libvirtError('virConnectOpen() failed')
libvirt.libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
[root@localhost Documents]#  

我設法抑制了錯誤,但它只是同樣的事情,但沒有錯誤。 我也在這里找到了這個腳本。

我在這里找到了這個腳本(...)

那么,您已經學到了第一課:您不應該依賴“此處”(實際上也不應該在大多數其他地方)找到的復制粘貼代碼。 實際上,您可以認為您在網上找到的大約 80% 的代碼都是垃圾(而且我很慷慨)。

我正在學習python

你做了完整的官方 Python 教程嗎? 如果不是,那么這就是你真正想要開始的(假設你已經掌握了基本概念,比如類型、變量、條件、迭代、函數等——否則你想要這個

例如,libvirtd 服務已停止且未建立連接,而是進一步深入到 if 語句中,它只是打印一些錯誤並停止

像大多數現代語言一樣,Python 使用一種名為“異常”的機制來表示錯誤。 這比從函數返回錯誤代碼或特殊值要強大、可用和可靠得多......

這在教程中都有解釋,所以我不會費心發布更正后的代碼,只需按照教程進行操作就足以讓您自己修復此代碼。

libvirt.libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory

此錯誤消息表明libvirtd守護程序實際上並未在此主機上運行。

如果您想捕獲錯誤,您的腳本仍然需要更改。 libvirt API 會在出現問題時引發異常,因此您需要一個 try/except 塊來捕獲和處理它,而不是根據“None”檢查返回值

暫無
暫無

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

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