返回布尔值和消息的python方法

2024-10-03 13:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的脚本,它检查各种Linux进程,找到其中一个进程,记录一条特定的消息(就引用服务名称而言是“特定的”)。在

我的问题:让多条件函数返回布尔值字符串(用于打印消息)的正确python方法是什么?在

下面是我当前解决方案的精简版本(使用元组):

import subprocess
import time

def _isProcessRunning(cmd):
    return int(
            subprocess.check_output(
                '{} | grep -v grep | wc -l'.format(cmd),
                shell=True
                )
            ) > 0

def processGroupFound():
    if _isProcessRunning('ps auwxx | grep duplicity'):
        return (True, 'Duplicity')
    elif _isProcessRunning('who | grep pts'):
        return (True, 'SSH')
    elif _isProcessRunning('netstat -na | grep ESTA | grep 5901'):
        return (True, 'VNC')
    else:
        return (False, '')

def worker():
    while True:
        process_found, service_string = processGroupFound()
        if process_found:
            print('{} found; skipping'.format(service_string))
        else:
            print('Continuing on')
        time.sleep(10)


if __name__ == "__main__":
    worker()

这是可行的,但是我关心的是正确地做它(特别是在风格上,但是如果你在这个简短的示例中发现了不正确的逻辑,请随时在那里发表评论。感谢您的帮助!在


Tags: importcmdtrueformatreturniftime进程
2条回答

我想这也是Python(但可能只有我一个人)

class NoRunningService(RuntimeError): pass

def findService():
    if _isProcessRunning('ps auwxx | grep duplicity'):
        return 'Duplicity'
    elif _isProcessRunning('who | grep pts'):
        return 'SSH'
    elif _isProcessRunning('netstat -na | grep ESTA | grep 5901'):
        return 'VNC'
    else:
        raise NoRunningService

def worker():
    while True:
        try:
            service_string = findService()
        except NoRunningService:
            print('Continuing on')
        else:
            print('{} found; skipping'.format(service_string))
        time.sleep(10)

Python中的空字符串是“False”,因此返回(False,“”有点多余)。我可以这样做:

def processGroupFound():
    if _isProcessRunning('ps auwxx | grep duplicity'):
        return 'Duplicity'
    elif _isProcessRunning('who | grep pts'):
        return 'SSH'
    elif _isProcessRunning('netstat -na | grep ESTA | grep 5901'):
        return 'VNC'
    else:
        return ''

def worker():
    while True:
        service_string = processGroupFound()
        if service_string:
            print('{} found; skipping'.format(service_string))
        else:
            print('Continuing on')
        time.sleep(10)

(见4.1 Truth Value Testing

相关问题 更多 >