0

irc ボットでシステムの稼働時間を表示しようとしています。私が使用しているスクリプトは次のとおりです。

   #linux
import os, sys
from datetime import timedelta
from util import hook
import subprocess
import datetime
@hook.command
def uptime_linux(inp,say=None):
    with open('/proc/uptime', 'r') as f:
        uptime_seconds = float(f.readline().split()[0])
        uptime_string = str(timedelta(seconds = uptime_seconds))
        say(uptime_string)
# windows

def uptime():
    """Returns a datetime.timedelta instance representing the uptime in a Windows    2000/NT/XP machine"""
    if not sys.platform.startswith('win'):
        raise RuntimeError, "This function is to be used in windows only"
    cmd = "net statistics server"
    p = subprocess.Popen(cmd, shell=True, 
          stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    (child_stdin, child_stdout) = (p.stdin, p.stdout)
    lines = child_stdout.readlines()
    child_stdin.close()
    child_stdout.close()
    lines = [line.strip() for line in lines if line.strip()]
    date, time, ampm = lines[1].split()[2:5]
    #print date, time, ampm
    m, d, y = [int(v) for v in date.split('/')]
    H, M = [int(v) for v in time.split(':')]
    if ampm.lower() == 'pm':
        H += 12
    now = datetime.datetime.now()
    then = datetime.datetime(y, m, d, H, M)
    diff = now - then
    return diff

@hook.command
def uptime_win(inp,say=None):
    if __name__ == '__main__':
        say(uptime())

エラーにはなりませんが、表示されません。私はコードを見てきましたが、なぜそれを見ることができないのか分かりません.多分それは小さなものかもしれませんが、私はそれを見ません:D. 必要なモジュールが含まれていますが、まだ動作しません :'(。また、Windows のアップタイムを取得する簡単な方法があるかどうかを尋ねたいと思います (既に Linux の場合があります)。ありがとう!

4

3 に答える 3

2

今のところ何が問題なのかわかりませんが、私が取り組んだボットが同様のことをしたのに役立つ場合は、そこを見てください。

uptime() at https://bazaar.launchpad.net/~p1tr-dev/p1tr/main/view/head:/plugins/info.py https://bazaar.launchpad.net/~p1tr- 定義された _get_output を使用dev/p1tr/main/view/head:/lib/plugin.py

于 2012-12-30T12:49:01.733 に答える
0

あなたはメインモジュールにいないと思うので、削除する必要がありますif __name__ == '__main__':

于 2012-12-30T15:53:09.077 に答える
0

Windowsボックスが手元にないため、Windowsでテストしていませんが、psutil(クロスプラットフォームであるはずです)を使用しています

>>> pid = psutil.Process(1) # get main process (kernel or close to it)
>>> pid
<psutil.Process(pid=1, name='init') at 31222480>
>>> pid.create_time # create_time is effectively system up time (or should be close to it)
1356597946.03
于 2012-12-30T16:12:12.857 に答える