DataEngineとPython2:新しいDataEngineの作成

DataEngineについての最初の小さなメモはここにあります 。 一般的に、私はこのトピックを続けるつもりはありませんでした。 しかし、開発プロセス中に、GPUの読み込み、GPUの温度、HDDの温度など、一連の新しいラベルを含めることが決定されました。 実装の過程で、私はいくつかの困難に直面し(「プラズマが落ちている」©)、状況から抜け出す方法を見つける過程で、ブラックジャックと遊女で新しいDataEngineを作成することにしました。

何かを見逃した人のために。 DataEngineは、 PyKDE4モジュールの特別なクラス( plasmascript.DataEngine )です。 実際-辞書のリスト、各辞書はそれにアクセスするときにいくつかの有用な情報を提供します。 おそらく最も人気のある「辞書」はシステムモニターと時間であり、両方の目的は明らかです。 私は、KDE4の半分が何らかの形でこれらの非常にDataEngineの作業に関係しているという漠然とした疑念に苦しんでいます。 このトピックの目的は、必要な辞書を使用して独自のDataEngineを作成することです。

誰が興味を持っていますか、私はhabrakatを求めます。



GPU温度モニターの観点からすべてが考慮され、残りは画像内の手(または指)のわずかな動きと似たような動きで行われます。 sに取りかかりましょう。



必要なモジュールを呼び出してクラスを宣言します:

from PyQt4.QtCore import * from PyKDE4.kdecore import * from PyKDE4 import plasmascript import commands class ExtendedSysMon(plasmascript.DataEngine): def __init__(self, parent, args=None): """dataengine definition""" plasmascript.DataEngine.__init__(self, parent) def init(self): """initialization""" self.setMinimumPollingInterval(333) # setup gpu device self.gpudev = '' commandOut = commands.getoutput("lspci") if (commandOut.lower().find('nvidia') > -1): self.gpudev = 'nvidia' elif (commandOut.lower().find('radeon') > -1): self.gpudev = 'ati'
      
      





最初の3つのモジュールはツール( エンジン )の操作用で、最後のモジュールは温度の取得用です。 __init__では、すべての文化的な人々と同様に、アナウンスのみを行います。 initでは、すべてが非常に簡単です。 最小要求間隔(333)をミリ秒で設定し、使用しているデバイス(nvidiaまたはati)を決定します。 もちろん、2番目の方法はより適切に実行できます。

「リソース」(「辞書」)を作成しましょう。

  def sources(self): """create sources""" sources = ["gputemp"] return sources def sourceRequestEvent(self, name): return self.updateSourceEvent(name)
      
      





ソースを記憶(書き留め)しましたが、まだ連絡する必要があります。 sourceRequestEvent関数は、ディクショナリリクエスト(またはディクショナリリクエストではない)を処理します。 これをすべて処理する関数( updateSourceEvent )を作成します。

  def updateSourceEvent(self, source): """update sources and setup values""" if (source == "gputemp"): if (self.gpudev == 'nvidia'): commandOut = commands.getoutput("nvidia-smi -q -d TEMPERATURE | grep Gpu | tail -n1") try: value = "%4s" % (str(round(float(commandOut.split()[2]), 1))) except: value = " N\A" elif (self.gpudev == 'ati'): commandOut = commands.getoutput("aticonfig --od-gettemperature | grep Temperature | tail -n1") try: value = "%4s" % (str(round(float(commandOut.split()[4]), 1))) except: value = " N\A" else: value = " N\A" self.setData(source, "GPUTemp", QString(value)) return True
      
      





すべてがシンプルで直感的です。 文字列を取得し、解析し、数字を引き出して辞書に渡します。 self.setData()関数について少し。 これには3つのパラメーターがあります:source(参照している辞書の名前、QString)、辞書キー(QString)、およびこのキーに対応する値(int、floatまたは何か、ここQString)。 他の通常の辞書と同様に、いくつかのキーが存在する可能性があることに注意してください。したがって、3つのハードドライブにHDDの温度のソースを3つ作成できます。 そうそう、 試してみてください...例外 -これは、ソフトウェア/ビデオカードなどの入手可能性に関する鈍いチェックを手配するためではありません。 多くのsourceがある場合if ... elif ...構造を作成します。

さて、スクリプトはほとんど準備ができています:

 def CreateDataEngine(parent): return ExtendedSysMon(parent)
      
      





それでは、すべてを美しくしましょう。

 $ ls -R extsysmon extsysmon: contents metadata.desktop extsysmon/contents: code extsysmon/contents/code: main.py
      
      





main.pyを他のディレクトリに配置すると、すべてが機能しているように見えても、何も開始されないという漠然とした疑念(ソースをめくる )に苦しんでいます。 そしてmetadata.desktopを作成します:

 [Desktop Entry] Encoding=UTF-8 Name=Extended SystemMonitor DataEngine Comment=Adds gpu, gputemp and hddtemp to DataEngine ServiceTypes=Plasma/DataEngine Type=Service Icon=utilities-system-monitor X-Plasma-API=python X-Plasma-MainScript=code/main.py X-KDE-PluginInfo-Author=%username% X-KDE-PluginInfo-Email=%e-mail% X-KDE-PluginInfo-Name=ext-sysmon X-KDE-PluginInfo-Version=1.0 X-KDE-PluginInfo-Website=http://kde-look.org/ X-KDE-PluginInfo-Category=System Information X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true
      
      





ここで基本的に重要なのは、 ServiceTypesX-Plasma-APIX-Plasma-MainScriptです。 最初は(DataEngine)のタイプを示し、2番目はシェルを示し、3番目は元のスクリプトへのパスを示します(コンテンツを除く)。 他の部分と同様に、残りは明確です。



アーカイブ(作業ディレクトリから):

zip -qr extsysmon.zip contents metadata.desktop





インストール:

plasmapkg -t dataengine -i extsysmon.zip





彼らは、タイプ( -t dataengine )を指定することが必須であると言います。そうでなければ、ウィジェットによって決定されます。

...

利益!

美しい絵、すべてが機能します:



GPUのロードを検出できませんが、GPU温度はありません。 ディスクリートグラフィックスカードがオフになっています。

ソースコードはgithubで入手できます。 ツールを接続して操作する方法については、最初のメモをご覧ください



All Articles