Python 调用 Shell 命令:sh 库 vs subprocess 全面对比
TL;DR 维度 subprocess sh 类型 标准库 第三方库 语法风格 列表 / 字符串 方法链 学习曲线 中等 低 代码量 多 少 跨平台 ✅ Windows/Linux/macOS ❌ 仅 POSIX 类型提示 ✅ 完整 ⚠️ 有限 推荐场景 跨平台、生产代码 Linux 脚本、快速开发 1. 基础介绍subprocess(标准库)Python 3.5+ 内置的进程管理模块,是 os.system() 和 os.popen() 的现代替代品。 12import subprocessfrom subprocess import run, check_call, check_output, Popen, PIPE, CalledProcessError sh(第三方库)一个让 shell 命令调用更 Pythonic 的库,通过动态属性访问实现命令调用。 123pip install sh# 或uv add sh 1import sh 2. 基础用法对比2.1 执行简单命令12345678910...
Linux 开发环境设置最佳实践
在笔记本上搭建高性价比的 Linux 学习环境:基础篇 本篇文章会尽可能详细的介绍如何在相对廉价的笔记本上搭建高性价比的 Linux 学习环境,让学习和工作都轻松和高效一些。尤其是针对国内网络环境下,如何快速的完成系统的安装和基础配置。 使用 Linux 的好处和必要性,我想应该不必过多赘述了,希望本文能够帮助你节约大量不必要的折腾的时间,腾出更多时间来思考、休息、以及打游戏。 写在前面 相信我的读者中不论是学生党还是已经工作的朋友,一定有憧憬 Linux ,但是迫于使用习惯、工作需求,而一直在使用 Windows 或 MacOS 的情况。 其中不少的朋友,应该也并不是完全没有碰过 Linux,甚至日常中可能会选择使用“多系统引导”、“虚拟机”、“远程云服务器”等方式来体验 Linux,而多过为 Linux 准备一台专用的本地的物理机,用 “裸金属 (Bare Metal)” 的方式运行系统。 既然有如此多的方式来运行 Linux,那么使用“裸金属”的方式来安装和使用 Linux,好处有哪些呢? 使用“裸金属”的方式运行 Linux 的好处 想知道使用“裸金属”方式安装 L...
Debian 12 fail2ban 无法启动
问题 在最新安装的 debian12 上遇到以下问题: 123456789101112131415 fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled) Active: failed (Result: exit-code) since Fri 2023-09-15 12:34:46 CEST; 1min 47s ago Duration: 71ms Docs: man:fail2ban(1) Process: 1027 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION) Main PID: 1027 (code=exited, status=255/EXCEPTION) CPU: 68msSep 15 12:34:46 jelly syst...
Linux 临时和永久修改 DNS 方法
1、修改 DNS 配置:方法一(临时修改,重启失效)修改下面文件: 1vi /etc/resolv.conf 加入想要修改的 DNS: 12nameserver 1.1.1.1nameserver 8.8.8.8 如果多个 DNS,就一行一个,修改之后保存退出即可; 此方法修改后即刻生效,但重启后失效 方法二(生成钩子阻止 DHCP 修改 resolv.conf)Debian/Ubuntu 下生成 nodnsupdate 文件: 123456vim /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate#!/bin/shmake_resolv_conf(){:} 给文件 nodnsupdate 添加可执行权限: 1chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate 重启系统,现在你就可以修改 /etc/resolv.conf 文件而且不会担心被回滚了。 方法三(写保护锁定 resolv.conf 文件)12rm -f /etc/res...
Tmux 教程
1. Tmux 是什么?!https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fe5674de-c6c5-4aef-b041-bd00ece9232d/2dab075fdcea44958d7afc99b37200db.png Tmux 是一个终端复用器(terminal multiplexer),属于常用的开发工具,学会了之后可以大大的提高工作效率。 1.1 基本概念 在使用 tmux 之前我们先了解关于 tmux 的几个名词: session,会话(任务) windows,窗口 pane,窗格 关于 session,很多人把 session 成为会话,但我觉得 叫任务 更适合一些。 在普通的终端中,窗口和其中由于 session(任务)而启动的进程是连在一起的,关闭窗口,session 就结束了,session 内部的进程也会终止,不管是否运行完。但是在具体使用中,我们希望当前的 session 隐藏起来,在终端中做其他事情,但是又不希望 session 及其进程被关闭。这样就需要用到 tmux,对 s...
ChatGPT 超级提示词
超级 Prompt: 12345678910111213141516171819202122232425 你是一个专家级 ChatGPT 提示工程师,在各种主题方面具有专业知识。在我们的互动过程中,你会称我为(你的名字)。让我们合作创建最好的 ChatGPT 响应我提供的提示。我们将进行如下交互:1. 我会告诉你如何帮助我。2. 根据我的要求,您将建议您应该承担的其他专家角色,除了成为专家级 ChatGPT 提示工程师之外,以提供最佳响应。然后,您将询问是否应继续执行建议的角色,或修改它们以获得最佳结果。3. 如果我同意,您将采用所有其他专家角色,包括最初的 Expert ChatGPT Prompt Engineer 角色。4. 如果我不同意,您将询问应删除哪些角色,消除这些角色,并保留剩余的角色,包括专家级 ChatGPT Prompt 工程师角色,然后再继续。5. 您将确认您的活动专家角色,概述每个角色下的技能,并询问我是否要修改任何角色。6. 如果我同意,您将询问要添加或删除哪些角色,我将通知您。重复步骤 5,直到我对角色满意为止。7. 如果我不同意,请继续下一步。8....
zimfw 初体验
之前使用 oh-my-zsh 的自带 git/nvm 等插件有时候有性能问题,同时据说其框架本身相比其他一些主打速度的配置框架 (prezto/zimfw 等) 也会慢一点。 稍微折腾了一下,使用 zimfw 作为 zsh 配置框架,它在速度和可配置性间达到了很好的平衡。 个人切换后,试了下跑 zprof,启动时间只有原先使用 oh-my-zsh 时的一半,且没有明显感觉缺失常用功能,度量方式参考 Profiling zsh startup time。 安装 按照项目 README 中的安装指南跑一遍就好,不超过一分钟。 插件加载 用上自带的模块和 zsh-users 里一些优秀的插件,就已经有很好的表现,其中 zsh-users/zsh-autosuggestions 和 zsh-users/zsh-syntax-highlighting 能让 zsh 也有类似于 fish 一样友好的代码高亮反馈和输入自动补全功能。zimfw 比较友好的一点就在于:默认配置(使用其提供的安装脚本)里给出的组合就已经很棒了。 添加插件的方式与 oh-m...
CSS 定位元素
大部分人在使用 selenium 定位元素时,用的是 xpath 定位,css 定位往往被忽略掉了,其实 css 定位也有它的价值,css 定位更快,语法更简洁。 我们先来看看 css 定位与 xpath 定位的区别在哪? CSS 与 Xpath 定位的区别 属性定位CSScss 可以通过元素的 id、class、标签这三个常规属性直接定位 css 用 #号表示 id 属性,如:id=’kw’ 可以写成:#kw css 用. 表示 class 属性,如:class=”s_ipt”可以写成:.s_ipt css 直接用标签名称,无任何标识符,如:input Xpathxpath 也可以通过元素的 id、name、class 这些属性定位 用 xpath 通过 id 属性定位driver.find_element(By.XPATH,”//[@id=’kw’]”) 用 xpath 通过 name 属性定位driver.find_element(By.XPATH,”//[@name=’wd’]”) 用...
Playwright with React
React 组件的属性 data-testiddata-testid 是 React 组件中的一个自定义属性,它通常被用于测试目的。通过设置 data-testid 属性,可以方便地在自动化测试工具(如 Jest、Enzyme 等)中定位元素。 举个例子,在编写一个带有输入框的 React 组件时,我们可以给这个输入框设置一个 data-testid 属性,如下所示: 1<input type="text" data-testid="my-input" /> 然后,在测试代码中,我们可以使用 getByTestId 函数来获取这个输入框元素,例如: 1234567import { render } from "@testing-library/react";test("renders an input element", () => { const { getByTestId } = render(<MyComponent ...
Python 路径操作模块 pathlib
Python 路径操作模块 pathlib1 pathlib 简介pathlib 是跨平台的、面向对象的路径操作模块,可适用于不同的操作系统,其操作对象是各种操作系统中使用的路径(包括绝对路径和相对路径),pathlib 有两个主要的类,分别为 PurePath 和 Path。 pathlib 模块主类继承关系图 1)PurePathPurePath 访问实际文件系统的“纯路径”,只负责对路径字符串执行操作。PurePath 有两个子类,即 PurePosixPath 和 PathWindowsPath,前者用于操作 UNIX(包括 Mac OS X)风格的路径,后者用于操作 Windows 风格的路径。 2)PathPath 访问实际文件系统的“真正路径”,Path 对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即 PosixPath 和 WindowsPath,前者用于操作 UNIX(包括 Mac OS X)风格的路径,后者用于操作 Windows 风格的路径。 3)PurePath 和 Path 的区别Path 是 PurePath 的子类,除了...