导出调度日志文件之奇思妙想 ---- by.广州组
评论
收藏

导出调度日志文件之奇思妙想 ---- by.广州组

经验分享
昕怡
2023-09-13 16:57·浏览量:1455
昕怡
发布于 2023-09-13 16:571455浏览

开心灵感来源:影刀RPA实施工程师--剑心


调度管理解决多个客户端难以集中管理、计划任务难以统一分配与跨机器人运行等问题,达到极大提升影刀RPA运行效率的目的。

大家都知道,影刀运行pc日志存放于%localappdata%\ShadowBot\log

调度模式下的日志在哪里呢?晕如何导出呢?问题来源于社区

https://www.yingdao.com/community/detaildiscuss?id=53b779ce-8c5a-4d2d-9921-4960f57fb34e&from=homePage



一、调度模式下日志所在位置


     在影刀调度模式下,PC(Process Control)日志通常位于应用所在电脑上,而不是控制台所在电脑上。

     影刀的调度模式中,控制台负责管理和调度任务,而应用则在各个节点上运行。PC日志记录了应用在各个节点上的运行情况,包括启动、停止、状态变更等信息。

     因此,如果您想查看PC日志,您需要登录到应用所在的电脑上,找到相应的日志文件。具体的日志位置和配置可能会根据您的影刀部署方式和配置设置有所不同。

     请注意,控制台上可能会有一些与PC日志相关的信息,如任务的状态变更记录等。但是,详细的PC日志通常是在应用所在电脑上进行查找和查看。

     调度日志文件存放于 %localappdata%\ShadowBot\users\Assistant\db 目录下, 每次运行生成 sqlite 文件


二、调度模式下,在控制台中操作将日志如何导出呢?


具体方案(一些奇思妙想~大伙儿都来试试叭)

     日志数据从SQLite数据库中提取出来,并保存为CSV文件。

     具体步骤如下:

①获取数据库路径: 使用os.environ['LOCALAPPDATA']来获取数据库路径,这是一个环境变量,表示本地应用程序数据的路径。确保该路径是正确的。

②获取当前日期字符串: 使用datetime.datetime.now().strftime("%Y-%m-%d")来获取当前日期的字符串表示,格式为"年-月-日"。确保你得到的日期格式是正确的。

③构建CSV文件路径: 使用os.path.join(os.path.expanduser('~'), 'Downloads', filename)来构建CSV文件的路径。这将在用户的"Downloads"文件夹下创建一个以当前日期命名的CSV文件。确保你有权限在该文件夹下创建文件。

④打开CSV文件并写入数据: 使用open(filepath, 'w', newline="")来打开CSV文件,并使用csv.writer来写入数据。确保你有权限在指定的路径下创建文件,并且文件没有被其他程序占用。

⑤遍历数据库路径下的文件: 使用os.listdir(db_path)来遍历数据库路径下的文件。确保数据库路径是正确的,并且路径下只包含数据库文件。

⑥判断是否为文件: 使用os.path.isfile(db_path_item)来判断遍历到的路径是否为文件。确保你只处理文件,而不是文件夹或其他类型的路径。

⑦连接数据库并执行查询: 使用sqlite3.connect(db_path_item)来连接数据库,并使用cursor.execute来执行查询语句。确保数据库文件是有效的SQLite数据库文件,并且查询语句正确。

⑧将数据写入CSV文件: 使用writer.writerows(data)将查询结果写入CSV文件。确保查询结果是一个可迭代的对象,并且每个元素都是一个可迭代的行。

⑨完成操作: 使用print("数据提取完成!")来输出操作完成的提示信息。确保你在控制台中能够看到这条提示信息。


使用代码如下:

import os
import sqlite3
import csv
import datetime

# 获取数据库路径
db_path = os.path.join(os.environ['LOCALAPPDATA'], "ShadowBot", "users", "Assistant", "db")

# 获取当前日期字符串
date_string = datetime.datetime.now().strftime("%Y-%m-%d")

# 构建CSV文件路径
filename = f"{date_string}_assistant-job-logs.csv"
filepath = os.path.join(os.path.expanduser('~'), 'Downloads', filename)

# 打开CSV文件并写入数据
with open(filepath, 'w', newline="") as csvfile:
    writer = csv.writer(csvfile)
    
    # 遍历数据库路径下的文件
    for filename in os.listdir(db_path):
        db_path_item = os.path.join(db_path, filename)
        
        # 判断是否为文件
        if not os.path.isfile(db_path_item):
            continue

        # 连接数据库并执行查询
        with sqlite3.connect(db_path_item) as conn:
            cursor = conn.cursor()
            cursor.execute('SELECT * FROM assistant_job_logs')
            data = cursor.fetchall()
            
            # 将数据写入CSV文件
            writer.writerows(data)

# 完成操作
print("数据提取完成!")


三、使用前你要确定


  你本地执行过调度的任务

  检查方法:

  使用快捷键Win+R打开运行窗口,然后输入%localappdata%\ShadowBot\users\Assistant\db,按下回车键,有文件存在~


收藏1
全部评论1
最新
发布评论
评论