知识周汇|SAP脚本自动化-淋过雨的人更懂得伞的价值

目录

摘要

1 知识概览

1.1SAP GUI脚本

1.2Tracker工具

2 实践案例

2.1步骤1:SAP启动并进入系统(文本关键)

2.1.1手动操作:鼠标双击SAP,并点击所需要系统

2.1.2代码实现

2.2步骤2:通过tracker完善后续操作

2.3完整代码示例

3 常见问题

3.1问题1:提示用户已禁用脚本支持

3.2问题2:如何将SAP界面设置成经典界面

4 参考文章

5 总结与思考


摘要

在许多企业中,核心业务数据通常存储在SAP系统中,且仅限内网访问以确保数据安全。然而,传统的手动操作方式,如逐条输入指令和频繁点击界面,不仅效率低下,还容易出错,给办公人员带来了极大的负担。为了解决这一问题,本文通过SAP GUI脚本模拟人工操作,实现数据下载的自动化。这种方法不仅显著提升了操作效率,还减少了重复性工作,从而大幅提高了办公人员的幸福度。

1 知识概览

本周知识点汇总时,先了解几个概念

1.1SAP GUI脚本

SAP GUI脚本:可以模拟用户在SAP GUI中的操作,如输入事务代码、填写表单、点击按钮等。它的概念与VBA(Visual Basic for Applications)中的宏在概念和功能上非常相似,都是通过录制或编写脚本来自动化重复性任务,从而提高工作效率。以下SAP录制脚本按钮,但是录制功能只有进入SAP指定系统后才能使用。

1.2Tracker工具

Tracker 是一款用于自动化操作 SAP GUI 的辅助工具,能够记录用户在 SAP 界面中的操作步骤,并将其转换为 Python 脚本。通过 Tracker,用户可以快速生成操作 SAP 的 Python 代码,减少手动编写脚本的工作量,提升开发效率。

Tracker软件下载(绿色版本下载直接用)

通过网盘分享的文件:Tracker_x64
链接: https://pan.baidu.com/s/1n-fyp4zqC-2L_MLxrbxT8w?pwd=smam 提取码: smam

2 实践案例

实践案例将基于人工操作步骤,逐步实现自动化。

2.1步骤1:SAP启动并进入系统(文本关键)

2.1.1手动操作:鼠标双击SAP,并点击所需要系统

2.1.2代码实现

# coding=utf-8
# 指定文件编码为UTF-8,确保脚本可以处理中文字符import os  # 用于操作系统相关功能,如执行命令
import subprocess  # 用于启动外部程序
import time  # 用于时间控制,如延时import win32com.client  # 用于与COM对象交互(如SAP GUI)
import win32con  # 提供Windows常量
import win32gui  # 用于操作Windows GUI元素# SAP登录启动函数
def saplogon_start():sessionCnt = 0  # 初始化会话计数器while sessionCnt == 0:  # 如果没有成功创建会话,则循环尝试# SAP Logon程序的本地路径sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"# 使用subprocess启动SAP Logon程序subprocess.Popen(sap_app)time.sleep(1)  # 等待1秒,确保程序启动flt = 0  # 初始化过滤器句柄while flt == 0:  # 循环直到找到过滤器输入框try:# 查找SAP Logon窗口句柄hwnd = win32gui.FindWindow(None, "SAP Logon 770")# 查找过滤器输入框的句柄flt = win32gui.FindWindowEx(hwnd, None, "Edit", None)except:time.sleep(0.5)  # 如果未找到,等待0.5秒后重试# 向过滤器输入框发送文本"PS4"win32gui.SendMessage(flt, win32con.WM_SETTEXT, None, "PS4")# 模拟按下右键(用于确认输入)win32gui.SendMessage(flt, win32con.WM_KEYDOWN, win32con.VK_RIGHT, 0)win32gui.SendMessage(flt, win32con.WM_KEYUP, win32con.VK_RIGHT, 0)time.sleep(0.1)  # 等待0.1秒# 查找登录按钮的句柄dlg = win32gui.FindWindowEx(hwnd, None, "Button", None)# 模拟点击登录按钮win32gui.SendMessage(dlg, win32con.WM_LBUTTONDOWN, 0)win32gui.SendMessage(dlg, win32con.WM_LBUTTONUP, 0)# 获取SAP GUI的COM对象SapGuiAuto = win32com.client.GetObject("SAPGUI")if not type(SapGuiAuto) == win32com.client.CDispatch:return  # 如果获取失败,直接返回# 获取SAP脚本引擎application = SapGuiAuto.GetScriptingEngineif not type(application) == win32com.client.CDispatch:SapGuiAuto = None  # 如果获取失败,释放资源并返回returntime.sleep(1)  # 等待1秒# 获取第一个连接connection = application.Children(0)if not type(connection) == win32com.client.CDispatch:application = None  # 如果获取失败,释放资源并返回SapGuiAuto = Nonereturntime.sleep(2)  # 等待2秒flag = 0  # 初始化标志位sessionCnt = connection.Children.count  # 获取当前连接的会话数量try:# 获取第一个会话session = connection.Children(0)if not type(session) == win32com.client.CDispatch:connection = None  # 如果获取失败,释放资源并返回application = NoneSapGuiAuto = Nonereturnexcept:try:# 如果发生异常,尝试强制关闭SAP Logon程序os.system('taskkill /F /IM saplogon.exe')except:pass  # 如果关闭失败,忽略异常return session  # 返回成功创建的会话对象

代码解读:

1. 导入模块

import os
import subprocess
import time
import win32com.client
import win32con
import win32gui
  • os:用于执行系统命令(如终止进程)。

  • subprocess:用于启动外部程序(如 SAP Logon)。

  • time:用于添加延时。

  • win32com.clientwin32conwin32gui:用于操作 Windows GUI 元素。


2. saplogon_start 函数

def saplogon_start():sessionCnt = 0while sessionCnt == 0:sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"  # 您的saplogon程序本地完整路径subprocess.Popen(sap_app)time.sleep(1)
  • 启动 SAP Logon 客户端。
  • 使用 subprocess.Popen 启动 saplogon.exe 程序。
  • 添加 1 秒的延时,等待程序启动。

        flt = 0while flt == 0:try:hwnd = win32gui.FindWindow(None, "SAP Logon 770")flt = win32gui.FindWindowEx(hwnd, None, "Edit", None)  # capture handle of filterexcept:time.sleep(0.5)
    • 查找SAP Logon窗口及其内部的输入框(用于输入系统名称)。

    • 使用 win32gui.FindWindow和win32gui.FindWindowEx获取窗口句柄。

    • 如果未找到窗口或输入框,等待 0.5 秒后重试。

            win32gui.SendMessage(flt, win32con.WM_SETTEXT, None, "PS4")win32gui.SendMessage(flt, win32con.WM_KEYDOWN, win32con.VK_RIGHT, 0)win32gui.SendMessage(flt, win32con.WM_KEYUP, win32con.VK_RIGHT, 0)time.sleep(0.1)
      • 在输入框中输入系统名称(如 PS4)。

      • 模拟键盘按下和释放右箭头键。

      • 添加 0.1 秒的延时,等待输入完成。
              dlg = win32gui.FindWindowEx(hwnd, None, "Button", None)  # 登陆(0)win32gui.SendMessage(dlg, win32con.WM_LBUTTONDOWN, 0)win32gui.SendMessage(dlg, win32con.WM_LBUTTONUP, 0)
      • 查找并点击登录按钮。

      • 使用 win32gui.SendMessage 模拟鼠标点击。

              SapGuiAuto = win32com.client.GetObject("SAPGUI")if not type(SapGuiAuto) == win32com.client.CDispatch:returnapplication = SapGuiAuto.GetScriptingEngineif not type(application) == win32com.client.CDispatch:SapGuiAuto = Nonereturntime.sleep(1)connection = application.Children(0)if not type(connection) == win32com.client.CDispatch:application = NoneSapGuiAuto = Nonereturntime.sleep(2)
      • 获取 SAP GUI 脚本引擎对象。

      • 获取当前连接和会话对象。

      • 如果获取失败,返回 None

              flag = 0sessionCnt = connection.Children.counttry:session = connection.Children(0)if not type(session) == win32com.client.CDispatch:connection = Noneapplication = NoneSapGuiAuto = Nonereturnexcept:try:os.system('taskkill /F /IM saplogon.exe')except:passreturn session
      • 检查会话是否成功建立。

      • 如果失败,终止 SAP Logon 进程并重试。

      • 返回 SAP 会话对象。

      3. 总结

      • 功能:通过 Python 脚本自动化启动 SAP Logon 客户端并登录到指定系统。
      • 适用场景:需要频繁登录 SAP 系统的场景。
      • 依赖:需要安装 pywin32 库,并确保 SAP GUI 脚本功能已启用。

      2.2步骤2:通过tracker完善后续操作

      进入到以下界面就已经成功一大半啦,因为后面可以借助tracker软件快速生成操作 SAP 的 Python 代码

      以下是操作步骤

      将上述代码整理下,均是通过tracker生成代码

          session.findById("wnd[0]").maximize()session.findById("wnd[0]/usr/txtRSYST-BNAME").text = user_sap  # 此次放入您的SAP登陆用户名session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = password_sap  # 此次放入您的SAP登陆密码session.findById("wnd[0]/usr/txtRSYST-LANGU").text = "EN"  # 设置英文session.findById("wnd[0]/tbar[0]/btn[0]").press()try:session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").select()session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").setFocus()session.findById("wnd[1]/tbar[0]/btn[0]").press()except:passtry:session.findById("wnd[1]/tbar[0]/btn[0]").press()except:pass

      代码解读

      这段代码用于自动化登录SAP系统,并处理登录过程中可能出现的多会话提示框。它通过SAP GUI的脚本接口(session.findById)来操作SAP的窗口和控件。

      session.findById("wnd[0]").maximize()
      • wnd[0] 是SAP GUI的主窗口标识。

      • maximize() 是最大化窗口的方法。

      session.findById("wnd[0]/usr/txtRSYST-BNAME").text = user_sap
      session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = password_sap
      • 在SAP登录界面的用户名输入框中输入用户名和密码

      • wnd[0]/usr/txtRSYST-BNAME 是用户名输入框的路径。

      • text 是输入框的属性,用于设置或获取文本内容。

      • user_sap 是变量,存储SAP登录用户名。

      • wnd[0]/usr/pwdRSYST-BCODE 是密码输入框的路径。

      • password_sap 是变量,存储SAP登录密码。

      session.findById("wnd[0]/usr/txtRSYST-LANGU").text = "EN"
      • 设置SAP登录界面的语言为英文。
      • wnd[0]/usr/txtRSYST-LANGU 是语言输入框的路径。
      • "EN" 表示英文,可以根据需要更改为其他语言代码(如ZH表示中文)。
      session.findById("wnd[0]/tbar[0]/btn[0]").press()
      • 点击SAP登录界面上的“确认”按钮。

      • wnd[0]/tbar[0]/btn[0] 是“确认”按钮的路径。

      • press() 是模拟点击按钮的方法。

          try:session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").select()session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").setFocus()session.findById("wnd[1]/tbar[0]/btn[0]").press()except:passtry:session.findById("wnd[1]/tbar[0]/btn[0]").press()except:pass
      • 功能处理多会话登录提示框(如果有)。

      • wnd[1] 是多会话提示框的窗口标识。

      • wnd[1]/usr/radMULTI_LOGON_OPT2 是选择“继续登录”选项的单选框路径。

      • select() 是选择单选框的方法。

      • setFocus() 是将焦点设置到该选项。

      • wnd[1]/tbar[0]/btn[0] 是多会话提示框的“确认”按钮路径。

      • 如果多会话提示框不存在,try-except会捕获异常并跳过。

      2.3完整代码示例

      # coding=utf-8
      # coding=utf-8
      import os
      import subprocess
      import timeimport win32com.client
      import win32con
      import win32gui# SAP开始共同部分
      def saplogon_start():sessionCnt = 0while sessionCnt == 0:sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"  # 您的saplogon程序本地完整路径subprocess.Popen(sap_app)time.sleep(1)flt = 0while flt == 0:try:hwnd = win32gui.FindWindow(None, "SAP Logon 770")flt = win32gui.FindWindowEx(hwnd, None, "Edit", None)  # capture handle of filterexcept:time.sleep(0.5)win32gui.SendMessage(flt, win32con.WM_SETTEXT, None, "PS4")win32gui.SendMessage(flt, win32con.WM_KEYDOWN, win32con.VK_RIGHT, 0)win32gui.SendMessage(flt, win32con.WM_KEYUP, win32con.VK_RIGHT, 0)time.sleep(0.1)dlg = win32gui.FindWindowEx(hwnd, None, "Button", None)  # 登陆(0)win32gui.SendMessage(dlg, win32con.WM_LBUTTONDOWN, 0)win32gui.SendMessage(dlg, win32con.WM_LBUTTONUP, 0)SapGuiAuto = win32com.client.GetObject("SAPGUI")if not type(SapGuiAuto) == win32com.client.CDispatch:returnapplication = SapGuiAuto.GetScriptingEngineif not type(application) == win32com.client.CDispatch:SapGuiAuto = Nonereturntime.sleep(1)connection = application.Children(0)if not type(connection) == win32com.client.CDispatch:application = NoneSapGuiAuto = Nonereturntime.sleep(2)flag = 0sessionCnt = connection.Children.counttry:session = connection.Children(0)if not type(session) == win32com.client.CDispatch:connection = Noneapplication = NoneSapGuiAuto = Nonereturnexcept:try:os.system('taskkill /F /IM saplogon.exe')except:passreturn sessiondef get_infor_from_SAP(user_sap, password_sap, sap_query, save_txt='保存.text'):session = saplogon_start()time.sleep(1)session.findById("wnd[0]").maximize()session.findById("wnd[0]/usr/txtRSYST-BNAME").text = user_sap  # 此次放入您的SAP登陆用户名session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = password_sap  # 此次放入您的SAP登陆密码session.findById("wnd[0]/usr/txtRSYST-LANGU").text = "EN"  # 设置英文session.findById("wnd[0]/tbar[0]/btn[0]").press()try:session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").select()session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").setFocus()session.findById("wnd[1]/tbar[0]/btn[0]").press()except:passtry:session.findById("wnd[1]/tbar[0]/btn[0]").press()except:pass"""下载记账数据过程"""# session.findById("wnd[0]").maximize()session.findById("wnd[0]/tbar[0]/okcd").text = sap_querysession.findById("wnd[0]/tbar[0]/btn[0]").press()session.findById("wnd[0]/usr/ctxtS_FICTR-LOW").text = '000'session.findById("wnd[0]/usr/ctxtPAR_01").text = '000'session.findById("wnd[0]/usr/ctxtPAR_02").text = '000'session.findById("wnd[0]/usr/ctxtPAR_03").text = str('1')session.findById("wnd[0]/usr/ctxtPAR_04").text = str('2')session.findById("wnd[0]/tbar[1]/btn[8]").press()try:session.findById("wnd[1]/tbar[0]/btn[0]").press()session.findById("wnd[0]/usr/lbl[74,13]").setFocus()session.findById("wnd[0]/usr/lbl[74,13]").caretPosition = 0except:pass# 获取信息try:session.findById("wnd[0]").sendVKey(48)session.findById("wnd[1]/usr/radCFDOWNLOAD-FORMAT_TEX").select()session.findById("wnd[1]/usr/ctxtCFDOWNLOAD-FILE").text = save_txtsession.findById("wnd[1]/usr/ctxtCFDOWNLOAD-FILE").caretPosition = 59session.findById("wnd[1]/tbar[0]/btn[0]").press()except:passtry:session.findById("wnd[2]/usr/btnSPOP-VAROPTION1").press()except:passsession.findById("wnd[0]").close()session.findById("wnd[1]/usr/btnSPOP-OPTION1").press()try:os.system('taskkill /F /IM saplogon.exe')except:passreturn save_txt# 程序入口
      if __name__ == "__main__":get_infor_from_SAP(user_sap='123', password_sap='123', sap_query='123', save_txt='保存.text')
      

      上述代码在实际运行中需要注意以下事项:①运行环境依赖:执行代码的计算机需要预先安装SAP客户端及相关组件;②安全配置:代码中的账务认证信息(包括用户名、密码等)需要替换为实际可用的有效凭证;③函数适配:get_infor_from_SAP()函数是通过tracker调试工具开发实现,在实际使用时需要根据具体项目需求进行相应调整

      • 导入模块:引入所需的 Python 库。

      • saplogon_start 函数:启动 SAP Logon 客户端并登录到指定系统。

      • get_infor_from_SAP 函数:登录 SAP 系统,执行查询并下载数据。

      • 主程序:调用 get_infor_from_SAP 函数,传入用户名、密码、查询代码和保存路径。

      3 常见问题

      3.1问题1:提示用户已禁用脚本支持

      解决方案:

      3.2问题2:如何将SAP界面设置成经典界面

      解决方案:

      4 参考文章

      博客《使用Python完成SAP客户端的打开和系统登录 - NewJune - 博客园》

      博客《python驱动SAP完成数据导出(一) - NewJune - 博客园》

      博客《几行python代码轻松实现SAP自动登录 - NewJune - 博客园》

      5 总结与思考

      感谢各位耐心看到最后,这篇文章是我一直想写的。过去几年,随着部门业务的调整,接手了部门中最繁琐的业务,SAP成为日常工作的核心。然而,手动操作效率低下,一直都很痛苦。在尝试来也科技的UiBot未果后,最终通过Python实现了SAP数据的自动下载,完成了从0到1的突破。结合pandas进行数据分析,极大提升了工作效率。特别感谢上述4的参考文章,它们写得非常好。正如那句“曾经淋过雨的人,更懂得伞的价值”,愿我手中的伞,为你撑起一片无雨的晴空。希望这篇文章能对各位有所帮助。

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27662.html

      如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

      相关文章

      【GPU使用】如何在物理机和Docker中指定GPU进行推理和训练

      我的机器上有4张H100卡,我现在只想用某一张卡跑程序,该如何设置。 代码里面设置 import os # 记住要写在impot torch前 os.environ[CUDA_VISIBLE_DEVICES] "0, 1"命令行设置 export CUDA_VISIBLE_DEVICES0,2 # Linux 环境 python test.py …

      【无标题】ABP更换MySql数据库

      原因:ABP默认使用的数据库是sqlServer,本地没有安装sqlServer,安装的是mysql,需要更换数据库 ABP版本:9.0 此处以官网TodoApp项目为例 打开EntityFrameworkCore程序集,可以看到默认使用的是sqlServer&…

      【网络编程】之TCP实现客户端远程控制服务器端及断线重连

      【网络编程】之TCP实现客户端远程控制服务器端及断线重连 TCP网络通信实现客户端简单远程控制主机基本功能演示通信过程代码实现服务器模块执行命令模块popen系列函数 客户端模块服务器主程序 windows作为客户端与服务器通信#pragma comment介绍 客户端使用状态机断线重连代码实…

      Git快速入门

      文章目录 Git简介准备工作常用的Linux命令git配置 git工作原理git项目创建和克隆git基本操作命令git忽略文件配置ssh远程连接 IDEA集成Gitgit分支(多人开发)公司中用到的(很清楚) Git 简介 Git就是版本控制的工具 下面这个叫手动…

      Redis 的几个热点知识

      前言 Redis 是一款内存级的数据库,凭借其卓越的性能,几乎成为每位开发者的标配工具。 虽然 Redis 包含大量需要掌握的知识,但其中的热点知识并不多。今天,『知行』就和大家分享一些 Redis 中的热点知识。 Redis 数据结构 Redis…

      深入解析Java虚拟机(JVM)的核心组成

      深入解析Java虚拟机(JVM)的核心组成 Java虚拟机(JVM)作为Java语言跨平台的核心实现,其架构设计精妙而复杂。理解JVM的组成部分,是掌握Java内存管理、性能调优和问题排查的关键。本文将从四大核心模块剖析J…

      GIT工具学习【2】:分支

      1.什么是分支 新建一个分支,可以认为把当前项目copy了一份,不太严谨,没毛病,里面虽然文件内容和名字相同,其实互相没有关系。 2.什么是合并分支 就是把两个分支(项目文件夹)合并在一起 git m…

      40岁开始学Java:Java中单例模式(Singleton Pattern),适用场景有哪些?

      在Java中,单例模式(Singleton Pattern)用于确保一个类只有一个实例,并提供全局访问点。以下是详细的实现方式、适用场景及注意事项: 一、单例模式的实现方式 1. 饿汉式(Eager Initialization) …

      Linux常见基本指令(一)

      目录 前言 1、ls指令 2、用户相关指令 3、pwd指令 4、cd指令 相对路径与绝对路径 5、创建、删除文件和目录相关的指令 创建相关的指令 删除相关的指令 6、拷贝、移动和重命名 cp指令 mv指令 前言 学习Linux的过程中一定要多自己动手,Linux的指令繁多&a…

      测试金蝶云的OpenAPI

      如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中,我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧! 2. 下载所需的SDK文件 2.1 获取SDK 首先&…

      Tomcat

      1.Tomcat是什么? Tomcat 是一个开源的、轻量级的 Servlet 容器,也被称为 Web 服务器,由 Apache 软件基金会的 Jakarta 项目开发,在 Java Web 开发领域应用广泛。 1)Servlet 容器:Servlet 是 Java 语言编写…

      【windows driver】 开发环境简明安装教程

      一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤: 1、安装Visual Studio IDE 笔者建议安装最新版本,可以向下兼容。发文截止到目前,VS2022是首选,当前笔者由于项…

      长时间目标跟踪算法(3)-GlobalTrack:A Simple and Strong Baseline for Long-termTracking

      GlobalTrack的原始论文和源码均已开源,下载地址。 目录 背景与概述 1.1 长期视觉跟踪的挑战 1.2 现有方法的局限性 1.3 GlobalTrack的核心思想 算法原理与架构 2.1 全局实例搜索框架 2.2 Query-Guided RPN(QG-RPN) 2.3 Query-Guided RCNN&a…

      使用mermaid查看cursor程序生成的流程图

      一、得到cursor生成的流程图文本 cursor写的程序正常运行后,在对话框输入框中输入诸如“请生成扫雷的代码流程图”,然后cursor就把流程图给生成了,但是看到的还是文本的样子,保留这部分内容待用 二、注册一个Mermaid绘图账号 …

      MacOS本地部署Deepseek,不联网也可以使用AI,保护隐私

      苹果笔记本本地部署deepseek主要用到Ollama与open-webui 1. 安装Ollama “Ollama” 是一个轻量级的 AI 模型运行时环境(runtime),旨在简化在本地部署和使用大语言模型(LLM)的过程。它由 Vicarious 公司开发&#xff…

      unity学习62,尝试做第一个小游戏项目:flappy bird

      目录 学习参考 1 创建1个unity 2D项目 1.1 2D项目模板选择 1.1.1 2D(built-in-Render pipeline) 1.1.2 universe 2D 1.1.3 这次选择 2D(built-in-Render pipeline) 1.2 创建项目 1.2.1 注意点 1.2.2 如果想修改项目名 2 导入美术资源包 2.1 下载一个flappy bird的…

      基于Matlab的多目标粒子群优化

      在复杂系统的设计、决策与优化问题中,常常需要同时兼顾多个相互冲突的目标,多目标粒子群优化(MOPSO)算法应运而生,作为群体智能优化算法家族中的重要成员,它为解决此类棘手难题提供了高效且富有创新性的解决…

      使用DiskGenius工具来实现物理机多硬盘虚拟化迁移

      使用DiskGenius工具来实现物理机多硬盘虚拟化迁移 概述准备工作注意事项实操过程记录1、Win7虚拟机,安装有两个硬盘(硬盘0和硬盘1),各分了一个区,磁盘2是一块未使用的磁盘2、运行DiskGenius程序,记录现有各…

      win本地vscode通过代理远程链接linux服务器

      时间:2025.2.28 1. win本地下载nmap.exe nmap官网 https://nmap.org/或者 https://nmap.org/download#windows下载win版本并安装。 2. vscode插件Remote-SSH 插件下载Remote-SSH 3. 配置 按照图中顺序配置ssh 1.点击左侧工具栏的“小电视”图标 2.点击ssh的…

      yolo初体验

      看别人说的好简单,3行代码完成yolo11: from ultralytics import YOLO model YOLO("yolo11x.pt")##第一次运行自动下载 model.predict(source"0",showTrue) 当然代码没错:但是环境不好配: 首先:pip install ultralytics 会主动下载依赖 pytorch pandas-…