【发布时间】:2009-06-24 08:01:31
【问题描述】:
我正在缓慢但肯定地自学 Python。我通过做学得最好。我正在寻找一些简洁的系统生产力类型的程序,我可以尝试使您发现对自己有用。我成功制作和使用的一些模块是这样的:
- 压缩文件夹
- 将整套文件夹压缩到存档中作为自动备份
- 在启动时打开我最常用的程序的应用启动器
但我现在有点卡住了。我还能做什么?
【问题讨论】:
标签: python
我正在缓慢但肯定地自学 Python。我通过做学得最好。我正在寻找一些简洁的系统生产力类型的程序,我可以尝试使您发现对自己有用。我成功制作和使用的一些模块是这样的:
但我现在有点卡住了。我还能做什么?
【问题讨论】:
标签: python
我编写了一个脚本,它使用我手机的蓝牙 ID 作为一种物理安全令牌。当 PC (Windows) 从睡眠状态恢复时,它会扫描附近的蓝牙设备,如果找不到我的手机,则会锁定工作站。
老生常谈,不是很安全,但服务于它的目的。
"""
Intended to run on Windows resume. Scans for bluetooth devices and if a
particular device is not present, locks the computer.
"""
import bluetooth
import ctypes
import sys
# Bluetooth UID of "token" device
wanted = "XX:XX:XX:XX:XX:XX"
print "performing inquiry..."
# Hack.... if 0 devices are present, pybluez throws an exception
passed = False
try:
discovered = bluetooth.discover_devices()
if wanted in discovered:
print "Found phone"
passed = True
else:
passed = False
except:
passed = False
if not passed:
print "Locking"
ctypes.windll.user32.LockWorkStation()
要求:
【讨论】:
另一个想法:阅读“Joel On Software”中的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),然后编写一个实用程序来扫描系统上的所有 HTML 文件并确保它们被正确编码。也就是说,确保页面声称拥有的内容类型与实际使用的内容类型相同。
【讨论】:
我使用 Python 2.5 编写了一个脚本,用于转储我的 Subversion 存储库、压缩转储文件并将其通过 scp 传输到两个备份服务器。将备份结果通过电子邮件发送给我。这是每天进行的。完成此操作后,我意识到我有多喜欢 Python 以及它的强大功能。
下一步是修改脚本以使用 rsync 并复制一些网站备份。
当然向我展示了 Python 的实用性。
【讨论】:
我还编写了一个 PyZip 实用程序来进行快速备份。它需要一个文件名模板和一个文件模式列表,如下所示:
pyzip store\ProjectFiles-[date] *.py *.txt
如果“store”文件夹不存在,则创建它
如果模板文件名不包含“.zip”,则添加
[date] 标记替换为当前日期 20090624
同样适用于 [时间],155859
我正在研究一个 [#] 标记,该标记将根据与整个模式匹配的现有文件名替换为下一个匹配数字,用于编号而不是带日期戳的备份
随着时间的推移,我想尽可能多地复制旧的 PKZip 命令行功能,并创建相应的 PyUnzip
我通常在 Windows 机器上使用 ActiveState Python,它带有 win32 扩展,所以我一直在编写大量 ActiveDirectory 管理脚本、Word 和 Excel COM 自动化、管理小型 SQLite 数据库以及我使用的许多其他东西与 VBScript 相关,以及许多用 VBScript 无法完成的事情(无论如何都很容易)。
【讨论】:
我编写了一个脚本来查找我系统上的所有 jar 文件并构建一个 java 类路径环境变量来设置我的 shell 以交互方式启动时。那一个脚本为我节省了很多时间。
当我需要使用新的 jar 时,我只是下载了它,然后重新运行了脚本。
我编写了一个相关脚本,让我可以在我系统上的所有 jar 中搜索特定的 Java 类名/文件/等。
一般来说,找到您每天执行的简单重复性任务并编写脚本来执行它们。您会惊奇地发现您可以节省多少时间,以及您将学到多少东西。
例如,编写一个在系统托盘中放置一个图标的程序非常容易,该图标会根据您是否有任何新的未读电子邮件而变化。
【讨论】:
我编写了一个脚本,该脚本使用 rsync 在本地驱动器上备份远程目录树,然后在仅使用增量运行任意次数后开始轮换备份(类似于 mac 上的时间机器)。让这个傻瓜在几台地理上独立的机器上运行,并且至少对我的数据免遭破坏的安全性感觉好多了。
脚本的大部分内容是从其他人的 bash 脚本中移植而来的,因此提供了一个很好的稳定功能范围以供借鉴 - 也许看看一些实用的 shell 脚本会给你一个将它“翻译”成 python 的想法,从而使其更具可扩展性和可读性。
您可以在 bitbucket 上查看repo。
【讨论】:
我最常使用的两个自制的小型文本实用程序是“sum”和“checkUTF8”。第一个是在标准输入的文件中汇总数字(每行一个)的过滤器,如下所示:
$ grep '[0-9.]' somefile | sum
567567
$ wc -l * | sum
45647
...不用说,我做了很多探索性的日志处理。
第二个检查文本文件是否以 UTF8 正确编码,如果不是,则显示问题行的行号、字节偏移量、字符偏移量和实际文本,并突出显示问题区域的开头。如有必要,这使得可以使用十六进制编辑器更正问题。现在问题比我从 iso8859-1 转换为 utf8 时要小得多,但它仍然会发生。
尽管“sum”很容易用任何脚本语言生成,但您需要对另一种语言提供良好的 unicode 支持。
【讨论】:
wc -l 是一个标准的 Unix 实用程序,可以计算行数。
sum 不像 wc -l 那样做,我添加了另一个示例。
我制作了一个 sn-p,在整齐的列中列出了系统上每个硬盘驱动器的总空间、剩余空间和已用空间。需要它用于报告用途。
还做了一个电子邮件日志解析器,这是一个非常有趣的练习。在此之前我没有使用过自定义状态机,但这让我对它们的潜在应用非常感兴趣(几乎所有东西,呵呵。)
【讨论】:
我使用 Python 作为一个简单的统计脚本(例如电池、cpu 使用情况、内存等)来管道到 dwm 中的动态栏。
类似于 Openbox 管道菜单的后端。
【讨论】:
有许多自定义日志分析器、安装程序、版本检查器等。一些脚本收集数据以在 Cacti 或 MRTG 等工具中进行可视化。
您可以在Python Recipes找到用 Python 编写的 mamy 系统实用程序
【讨论】:
我曾经写过一个小的 Python 模块,我将它与WinCVS 上的“清理”实用程序菜单集成。它提供了一个方便的快捷方式,可以轻松删除 Microsoft Visual Studio 为每个项目生成的所有那些不应置于版本控制之下但以某种方式提交的文件。
【讨论】:
看看这本书Python for Unix and Linux System Administration。你可能会在那里找到一些灵感。
【讨论】:
尝试编写一个非常简单的电子邮件客户端,作为向您的计算机发送专门消息的一步,这些消息告诉它执行特定操作,例如运行作业、重新启动、回复一些信息等。
【讨论】:
在 Windows 平台上,我围绕 win32file.FindFilesW() API(来自 Windows 的 python 扩展包)编写了一个包装类,以有效地计算任何给定文件夹(本地或远程)的总大小。 API 本身是 Win32 API 中 FindFilesW() 函数的包装器。对于我的类对象,我添加了非常有用的附加功能,而不仅仅是获取总文件夹大小。特别是,我添加了一个功能来捕获拒绝访问的文件和子文件夹的完整路径,以便我可以知道我得到的结果是倾斜的还是真实的;我添加了一个功能来检索总大小到一定数量(以防我只想知道是否存在任何数据,例如 1 字节、15 字节、1MB 等);我添加了一项功能以继续处理拒绝访问错误。我这样做是因为在 VBScript(我最初出于政治原因使用它)中,如果遇到任何拒绝访问错误,捕获给定文件夹总大小的能力将失败。在 Windows 资源管理器 shell 中,查看文件夹的属性会告诉您总大小,但不会在遇到任何拒绝访问错误时通知您,因此可能会在您不知情的情况下扭曲 size 属性。
【讨论】:
如何查看给定目录中所有文件的magic numbers 并在必要时修复文件扩展名。例如,如果一个 .wav 文件以“MThd”开头,那么它可能是一个以某种方式命名错误的 Midi 文件。
【讨论】:
我为 rsync 编写了一个实用程序,设置用户/组并规范化我的音乐收藏。是的,它本来可以在 bash 中完成,但我不擅长 bash。
我在一个前雇主的工作中对一些 javascript 代码进行了持续集成过程,该过程使用 mercurial 中的 post commit hooks 来执行各种操作,例如缩小/压缩运行 YUItest 以及使其准备好投入生产使用所需的其他步骤.我怀疑他们仍在使用它。它是为了让我免于沮丧而构建的。
最近,我构建了一个脚本,通过 graphviz 生成 png 的一堆 jwc,显示了我当前雇主代码库中所有挂毯组件之间的依赖关系。我们可能会在某个时候为我们的夜间工作将其纳入 CI。
最后,大约 3 年前,我用一个完整的 py-tk 应用程序替换了大约 10K 行非常讨厌的 t-sql 应用程序,用于将客户数据从应用程序版本迁移到另一个应用程序。
有各种工具可以在紧要关头从服务器日志中解析和提取各种内容。
其他有趣的东西。
【讨论】:
我有很多歌曲、视频和图像,我将它们转储到非常直观地命名为“myfolder”的文件夹中,我尝试进行整理,但随着时间的推移,我在不同的文件夹中发现了许多重复的歌曲,在多个地方都有相同的图像等等
所以我编写了一个脚本来删除重复文件,这可能是一个有趣的练习。
所以问题Finding duplicate files and removing them 确实实现了类似的脚本:)
【讨论】:
自动取消存档,因为我厌倦了记住所有 tar 标志。
我写的那个是基于文件扩展名的(查看os.path.splitext,或astring.split(".") 以获得多个扩展名,如tar.gz),但如果失败,您可以尝试通过调用@ 来确定文件类型987654333@ 命令与subprocess
用于计算总磁盘空间、总使用量、总可用空间并以人类可读术语显示的工具。可以使用os 模块,或解析df 命令的输出(使用subprocess 和re 模块)。还需要写一个函数把字节数变成GB/TB/etc
Youtube FLV 文件下载器,可能使用 urllib 检索源,BeautifulSoup 解析 HTML,再次使用 urllib 下载文件(Firefox Live HTTP Headers 插件有助于解决它如何解析 flv URL )
【讨论】:
我编写了一个脚本,它收集来自 71 个不同位置的天气数据,并在集体和个人层面进行统计分析 - 为此使用 pywapi 模块和常规 cron 来自动收集数据。 :-)
【讨论】: