首页 文章 精选 留言 我的

精选列表

搜索[批量计算],共10006篇文章
优秀的个人博客,低调大师

Python的pxssh实现ssh登录之批量“打杂”

一、简单概要 这是我在生产环境用的一个脚本,根据实际运维情况编写,说白了就是人比较懒,不想打杂。哈哈!不明白的同学可以@我哦!,感谢! 二、代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #!/usr/bin/envpython from pexpect import pxssh import os try : for i in range ( 64 , 65 ): #在这个位置定义起始和结束的数字用于IP的主机号 s = pxssh.pxssh() ipaddr = '192.168.1.%s' % i #生成一个完整的IP地址 os.environ[ 'ip' ] = str (ipaddr) #变量呼唤,python变量可以在shell里拿 print 'sshconnectionhost:%s' % ipaddr s.login(ipaddr, 'root' , '123456' ) #登录主机(ip,用户,密码) print 'loginok!' #提示登录ok而已,仅此而已 print 'Create(/etc/ceph/)directory...' #登录进去就得干活了,比如创建目录 s.sendline( 'mkdir-p/etc/ceph' ) print 'createok!' print 'Issuedbytheconfigurationfile...' os.system( 'sshpass-p123456scp/etc/ceph/*root@$ip:/etc/ceph' ) #这个文件是下发文件,这里跟pxssh没关系 print 'fileissuedok!' print 'Issuedbythescript...' s.sendline( 'mkdir-p/openstack' ) #这里也是在远程主机执行命令,其他的都类似 os.system( 'sshpass-p123456scp/root/osd.shroot@$ip:/openstack' ) os.system( 'sshpass-p123456scp/root/com.txtroot@$ip:/openstack' ) print 'scriptissuedok!' print 'Runthescript...' s.sendline( 'sh/openstack/osd.sh' ) print 'scriptrunok!' s.prompt() print 'host:%scompletes,exitthessh...' % ipaddr s.logout() print 'exitok!' except pxssh.ExceptionPxssh,e: print "pxsshfailedonlogin" print str (e) 本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1866032

优秀的个人博客,低调大师

批量包裹监控方案,智能快递查询接口PHP实战

电商行业的蓬勃发展带动了整个物流产业链。订单量激增的当下,人工查询快递物流已经不现实。 通过程序自动拉取包裹全链路物流节点,实时获取揽收、在途、派送、签收、异常退回等状态。可直接集成到商城网站、小程序、ERP、OMS/WMS等业务系统,实现物流信息自动化同步。 ## 二、PHP调用示例 ``` ``` ## 三、接口请求参数说明 ### 请求参数 ![image.png](https://developer.qcloudimg.com/http-save/yehe-12701231/32ae95a4addcbeb74f0c31c87893fc36.png) *数据来源:探数API* - `com`:快递公司编码,选填,**生产环境建议传入准确编码,提升识别准确率与响应速度。** ## 四、接口返回JSON示例 ``` { "code": 1, "msg": "操作成功", "data": { "company": "中通快递", //快递公司名称 "com": "zto", //快递公司编码 "no": "787111111169699", //快递单号 "com_phone": "95311", //快递公司联系方式 "com_url": "www.zto.cn", //快递公司网址 "take_time": "4天17小时8分", //物流轨迹耗时 "courier_phone": "18111111061", //快递员联系方式 "status_desc": "已签收", //签收状态文案 "status_detail": 4, //当前节点状态 1 揽件 2 运输中 3 派送中 4 已签收 5 包裹异常/签收失败 10 退回 "list": [ { "datetime": "2026-09-04 15:58:17", //物流时间 "remark": "【东莞市】已签收,签收人凭取货码签收,如有疑问请电联:0769-33550361/ 0769-33550361。感谢使用中通快递,期待再次为您服务!" //节点详细信息 }, { "datetime": "2026-09-01 15:17:14", "remark": "【东莞市】东莞樟木头 的业务员【李杨,1811111161】正在为您派件(95720为中通快递员外呼专属号码,请放心接听,如有问题可联系网点:0769-33550361,投诉电话:13011111100)" }, { "datetime": "2026-09-01 14:30:07", "remark": "【东莞市】 快件已到达 东莞樟木头" }, { "datetime": "2026-08-31 05:13:53", "remark": "【南宁市】 快件已到达 南宁转运中心" }, { "datetime": "2026-08-30 22:50:05", "remark": "【南宁市】 快件已发往 南宁转运中心" }, { "datetime": "2026-08-30 22:49:35", "remark": "【南宁市】 南宁建工城(0771-7711792,19111111101)项目部-漫花(1911111501) 已揽收" } ] } } ``` ### 返回字段解读 1. `status_detail`:业务核心状态码,后端可基于该字段做状态判断、消息推送逻辑开发。 2. `list`:物流轨迹数组,按时间倒序排列,前端直接循环渲染即可生成物流时间线。 ## 五、业务应用场景 ### C端前台场景 1. **商城网站/小程序/APP订单详情页** 用户打开订单页面自动加载物流轨迹;也支持单独输入单号查询包裹。 2. **快递查询工具小程序/H5** 轻量查件工具,一键获取完整物流信息。 ### B端商家后台场景 1. **ERP、OMS、WMS订单管理系统** 系统定时拉取物流状态,自动更新订单;统计发货时效,输出物流报表。 2. **物流节点消息通知** 监听物流状态变更,包裹动态自动推送公众号或短信通知,减少客服咨询压力。

优秀的个人博客,低调大师

如何用 C# 批量提取 PDF 表单数据

在企业信息化流程中,PDF 表单是一种常见的数据采集载体。用户填写完成后,系统往往需要自动提取表单域中的数据,用于入库、校验或后续业务处理。本文将介绍如何使用 C# 读取 PDF 文档中的交互式表单域,覆盖文本框、复选框、单选按钮组、下拉列表等常见字段类型。 --- ## 一、方案概述 PDF 表单域的每个字段拥有唯一名称、类型标识和当前值。读取表单域的核心思路是:加载 PDF 文档 → 获取表单集合 → 遍历字段 → 根据字段类型提取对应值。 本文采用 Free Spire.PDF for .NET 免费库来完成读取操作。该库提供了 `PdfFormWidget` 类型用于操作 PDF 表单,支持通过索引或字段名定位具体字段。 --- ## 二、环境准备 ### 2.1 安装 NuGet 包 在 Visual Studio 的 NuGet 包管理器中搜索并安装 `FreeSpire.PDF`,或在包管理器控制台执行: ``` Install-Package FreeSpire.PDF ``` 安装完成后,项目中会自动添加 `Spire.Pdf.dll` 引用。免费版对单个 PDF 文档有10页限制,对于表单读取场景通常足够使用。 ### 2.2 引入命名空间 ``` using Spire.Pdf; using Spire.Pdf.Widget; using System; using System.Text; ``` --- ## 三、读取 PDF 表单域的基本流程 ### 3.1 加载 PDF 文档并获取表单 ``` // 创建 PdfDocument 实例并加载 PDF 文件 PdfDocument doc = new PdfDocument(); doc.LoadFromFile("YourForm.pdf"); // 获取文档中的表单(需转换为 PdfFormWidget 类型) PdfFormWidget formWidget = doc.Form as PdfFormWidget; ``` 需要注意的是,`doc.Form` 属性返回的是表单对象,但为了访问完整的字段集合,需要将其转换为 `PdfFormWidget` 类型 ### 3.2 遍历所有表单域 通过 `formWidget.FieldsWidget.List` 可以获取所有表单域的集合: ``` // 遍历所有表单域 for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++) { PdfField field = formWidget.FieldsWidget.List[i] as PdfField; // 获取字段名称 string fieldName = field.Name; Console.WriteLine($"字段名称: {fieldName}"); } ``` --- ## 四、获取不同类型表单域的值 PDF 表单中常见的字段类型包括文本框、复选框、单选按钮、列表框和下拉列表框等。针对不同类型的字段,需要使用不同的属性来获取其值 ### 4.1 文本框(PdfTextBoxFieldWidget) 文本框字段的值存储在 Text 属性中: ``` if (field is PdfTextBoxFieldWidget) { PdfTextBoxFieldWidget textBoxField = field as PdfTextBoxFieldWidget; string name = textBoxField.Name; string value = textBoxField.Text; Console.WriteLine($"文本框 - 名称: {name}, 值: {value}"); } ``` ### 4.2 复选框(PdfCheckBoxWidgetFieldWidget) 复选框的选中状态可通过 `Checked` 属性判断: ``` if (field is PdfCheckBoxWidgetFieldWidget) { PdfCheckBoxWidgetFieldWidget checkBoxField = field as PdfCheckBoxWidgetFieldWidget; string name = checkBoxField.Name; bool isChecked = checkBoxField.Checked; Console.WriteLine($"复选框 - 名称: {name}, 是否选中: {isChecked}"); } ``` ### 4.3 单选按钮组(PdfRadioButtonListFieldWidget) 单选按钮组中,可通过 `SelectedValue` 获取哪个选项被选中: ``` if (field is PdfRadioButtonListFieldWidget) { PdfRadioButtonListFieldWidget radioBtnField = field as PdfRadioButtonListFieldWidget; string name = radioBtnField.Name; string selectedValue = radioBtnField.SelectedValue; Console.WriteLine($"单选按钮 - 名称: {name}, 选中值: {selectedValue}");; } ``` ### 4.4 列表框(PdfListBoxWidgetFieldWidget) 列表框的值包括所有可选项以及当前选中的项: ``` if (field is PdfListBoxWidgetFieldWidget) { PdfListBoxWidgetFieldWidget listBoxField = field as PdfListBoxWidgetFieldWidget; string name = listBoxField.Name; string selectedValue = listBoxField.SelectedValue; Console.WriteLine($"列表框 - 名称: {name}, 选中值: {selectedValue}"); // 获取所有选项 PdfListWidgetItemCollection items = listBoxField.Values; foreach (PdfListWidgetItem item in items) { Console.WriteLine($" 选项: {item.Value}"); } } ``` ### 4.5 下拉列表(PdfComboBoxWidgetFieldWidget) 下拉列表框的取值方式与列表框类似: ``` if (field is PdfComboBoxWidgetFieldWidget) { PdfComboBoxWidgetFieldWidget comboField = field as PdfComboBoxWidgetFieldWidget; string name = comboField.Name; string selectedValue = comboField.SelectedValue; Console.WriteLine($"下拉列表框 - 名称: {name}, 选中值: {selectedValue}"); } ``` --- ## 五、注意事项与常见问题 ### 5.1 空表单判断 并非所有 PDF 都包含表单。如果 `doc.Form` 无法转换为 `PdfFormWidget`,或 `FieldsWidget.Count` 为 0,说明文档不含交互式表单域,此时应走普通文本提取流程。 ### 5.2 XFA 表单与 AcroForm 表单 PDF 表单主要有两种标准: - **AcroForm**:Adobe 原生表单标准,也是本文介绍的类型,对应 `PdfFormWidget` - **XFA 表单**:基于 XML 的表单规范,常见于旧版 Adobe LiveCycle 设计的表单 如果遇到 XFA 表单,需要通过 `formWidget.XFAForm` 另行处理,字段结构与取值方式完全不同。 ### 5.3 资源释放 处理完 PDF 后,建议调用 `doc.Close()` 释放资源: ``` doc.Close(); ``` --- ## 六、总结 读取 PDF 表单域的核心在于正确识别字段类型并调用对应的取值属性。`PdfFormWidget` 提供了统一的字段访问入口,配合 `as` 模式匹配进行类型转换,即可覆盖绝大多数 AcroForm 表单的读取需求。 在实际项目中,建议先通过遍历方式摸清目标 PDF 的字段结构与命名规则,再封装为强类型的数据模型进行业务处理,这样既能保证读取的准确性,也便于后续维护扩展。

优秀的个人博客,低调大师

C# 示例:批量合并 Word 文档并转为 PDF

将多个 Word 文档合并成一个 PDF 文件,方便分发、打印或存档。本文将介绍如何利用 Spire.Doc for .NET 库,通过几行简洁的 C# 代码,轻松实现将指定文件夹下的所有 Word 文档合并并导出为 PDF。 作为一款专业的 .NET Word 组件,Spire.Doc for .NET 允许开发者在无需安装 Microsoft Office 的情况下,高效地创建、编辑、转换和打印 Word 文档,具有出色的稳定性和可扩展性。 ![](https://developer.qcloudimg.com/http-save/yehe-12495000/eca6dea5e9270e053b7e77975de41149.png) ## 准备工作:安装 Spire.Doc 首先,在你的 .NET 项目中安装 Spire.Doc 库。推荐通过 NuGet 包管理器进行安装,方便快捷。 你可以通过 Visual Studio 的“管理 NuGet 包”搜索 Spire.Doc 并安装,或者在“程序包管理器控制台”中执行以下命令: ``` PM> Install-Package Spire.Doc ``` ## 代码实现:合并与转换 核心逻辑很简单:创建一个新的 `Document` 对象来承载最终合并的内容;读取文件夹下所有 Word 文件;加载第一个文档作为基础;然后循环将后续文档插入其中;最后一步是将其保存为 PDF 格式。 以下是完整的代码示例: ``` using System.IO; using System.Linq; using Spire.Doc; namespace MergeWordFolder { class Program { static void Main(string[] args) { // 1. 创建目标文档容器 Document mergedDocument = new Document(); // 2. 获取指定文件夹下所有的 Word 文档 string folderPath = @"Documents"; // 请替换为你的文件夹路径 string[] files = Directory.GetFiles(folderPath, "*.docx") .OrderBy(f => f) .ToArray(); // 检查是否有文件 if (files.Length == 0) { Console.WriteLine("文件夹中没有找到 .docx 文件。"); return; } // 3. 加载第一个文档作为基础 mergedDocument.LoadFromFile(files[0], FileFormat.Docx); // 4. 依次插入剩余的文档 for (int i = 1; i f)` 确保了文件按名称排序合并,避免了顺序混乱。你可以根据需要调整排序逻辑。 1. **加载与插入** : - `mergedDocument.LoadFromFile(files[0], FileFormat.Docx)`:将第一个 Word 文档加载到我们创建的空白容器中。 - `mergedDocument.InsertTextFromFile(files[i], FileFormat.Docx)`:这是一个非常高效的方法。在循环中,它将后续每个 Word 文档的全部内容(包括文本、图片、表格、页眉页脚等)直接插入到 `mergedDocument` 的末尾。 1. **保存为 PDF** :`mergedDocument.SaveToFile("MergedDocument.pdf", FileFormat.PDF)` 是最后一步,也是最关键的一步。它将合并好的 `Document` 对象直接输出为一个 PDF 文件,实现了从“合并”到“转换”的一站式操作。 ## 总结与扩展 通过上述简单的代码,我们成功避免了手动打开、复制、粘贴再另存为 PDF 的繁琐流程。Spire.Doc 库在处理此类文档合并任务时非常高效。 除了合并 `.docx` 文件,这个方法还具备很强的扩展性。例如,如果你需要合并 `.doc` 文件,只需修改 `Directory.GetFiles` 的搜索模式,并在 `LoadFromFile` 和 `InsertTextFromFile` 方法中指定对应的 `FileFormat` 即可。

优秀的个人博客,低调大师

如何使用 jiascheduler 替换 salt 批量广播执行脚本

背景 在运维场景下,我们经常要推送一些脚本到大量的机器上执行,比如我们需要修改生产所有虚机的dns,一般而言用户需要实现这个功能可以借助譬如salt这样的传统运维管理工具,也可以自己开发功能,循环通过ssh连接到目标节点执行脚本 对于salt这类工具执行过程不透明,执行失败率较高,难以审计,主要依赖运维人员自身。 开发脚本的话难度较高,难以复用,耗时耗力。 针对以上难题,jiascheduler默认提供广播执行模式,可以一次将脚本推送到数以万计的实例执行,并且实时收集执行结果。 开始使用 我们将会针对修改dns这个具体的应用场景,演示如何使用jiascheduler。使用之前,我们需要做一些准备工作,如创建团队,创建作业,设置标签等... 设置团队 jiascheduler支持根据职责设置不同团队,我们首先创建dns维护团队,后续我们可以方便的将所有运维相关脚本存放到该团队 设置过团队以后,我们可以在导航栏右上角切换不同团队 团队选择好之后,我们就可以开始创建作业了 创建作业 作业对应用户的执行脚本,这里我们创建了一个修改dns的作业 我们可以在编辑作业时,设置执行用户,脚本超时,执行目录等,开启大盘显示后,作业的执行状态会同步展示在用户工作台中 广播推送 准备好作业之后我们就可以开始广播推送了,点击启动开始配置目标执行节点。 推送之后会生成一条调度记录,调度记录包含了当前作业的快照和执行该脚本的所有的目标节点,基于调度记录我们可以对调度进行重放(启动,停止)。 查看执行结果 在运行列表中,我们可以实时查看节点的执行状态,并对运行中的作业进行干涉,运行状态提供了针对单个节点,单个作业的更细粒度的控制。 如果我们一次调度中的执行节点有多个,我们期望一次全部停止当前运行的作业,那么我们可以从调度记录中执行这些快捷操作,调度记录中还记录了当前调度的作业快照状态,作业的执行记录等。 调度详情中的执行记录汇总了当次调度中所有节点的执行结果,供用户方便的找出执行异常的实例。 最后,jiascheduler把所有的执行记录放在了一个专有的菜单,供用户审计

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册