【问题标题】:Formatting Python Fabric Output格式化 Python Fabric 输出
【发布时间】:2020-12-29 21:24:06
【问题描述】:

我正在尝试将脚本放在一起以通过主机列表进行 ssh 并测试某个进程是否正在运行,然后为每个主机打印出该进程是否正在运行。这是一个例子:

from fabric.api import *
import getpass

env.user = user'
env.password = getpass.getpass(prompt='Password: ', stream=None)
env.hosts = ['localhost']


def uptime():
    run("uptime")


def getinfo():
    hostname = run("hostname")
    run("ps aux | grep -i apache") 

这里的问题是有多个名为 apache 的进程,因此它会输出一个巨大的列表,而不是在遍历服务器列表时仅仅说出“Apache 正在主机 1 上运行”的效果。我如何使用 python 以这种方式格式化输出,或者在 Linux 中将其作为实际 shell 命令的一部分(ps aux | grep -i apache)?

【问题讨论】:

标签: python linux fabric


【解决方案1】:

我想通了。问题是打开文件不正确,这实际上是有效的。

from fabric.api import *
import getpass

env.user = 'user'
env.password = getpass.getpass(prompt='Password: ', stream=None)
env.hosts = ['localhost']

def uptime():
    run("uptime")

def hostname():
    run("hostname")

def getinfo():
    hostname = run("hostname")
    f = open("output.txt", "a")
    with hide('output'):
        var1 = run("ps aux | grep -i steam")
    if var1:
        print("Steam is running on " + hostname, file=f)
    elif var1:
        print("Steam is not running on " + hostname, file=f)
    
    f = open("output.txt", "a")
    with hide('output'):
        var1 = run("ps aux | grep -i pidgin")
    if var1:
        print("Pidgin is running on " + hostname, file=f)
    elif var1:
        print("Pidgin is not running on " + hostname, file=f)
    
    f = open("output.txt", "a")
    with hide('output'):
        var1 = run("ps aux | grep -i firefox")
    if var1:
        print("Firefox is running on " + hostname, file=f)
    elif var1:
        print("Firefox is not running on " + hostname, file=f)
    f.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多