你做的有趣的Python系统实用程序?

时间:2009-06-24 08:01:32

标签: python

我慢慢地,但肯定地教自己Python。我做得最好。我正在寻找一些整洁的系统生产力程序,我可以尝试制作你发现对自己有用的程序。我成功制作和使用的一些模块如下:

  • 压缩文件夹
  • 将一整套文件夹作为自动备份压缩到存档
  • 在启动时打开我最常用程序的应用程序启动器

但我现在有点卡住了。我还能做什么?

19 个答案:

答案 0 :(得分:7)

我写了一个脚本,它使用我手机的蓝牙ID作为一种物理安全令牌。当PC(Windows)从睡眠状态恢复时,它会扫描附近的蓝牙设备,如果找不到我的手机,则锁定工作站。

Corny,并不是很安全,但却有其目的。

"""
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()

需要:

  1. pybluez蓝牙
  2. Hibernate Trigger安排任务在简历上运行。

答案 1 :(得分:3)

使用Python 2.5我写了一个脚本来转储我的Subversion存储库,压缩转储文件并将其scp转移到两个备份服务器上。通过电子邮件向我发送备份结果。这是每天完成的。完成这个后,我意识到我有多喜欢Python以及它有多强大。

下一步是修改脚本以使用rsync并复制一些网站备份。

当然向我展示了Python的实用性。

答案 2 :(得分:3)

另一个想法:从“Joel On Software”中读取The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),然后编写一个实用程序来扫描系统上的所有HTML文件,并确保它们编码正确。也就是说,确保页面声称拥有的内容类型与实际使用的内容类型相同。

答案 3 :(得分:2)

我编写了一个脚本来查找系统中的所有jar文件,并构建一个java类路径环境变量,以便在我的shell以交互方式启动时进行设置。那一个脚本为我节省了很多时间。

当我需要使用新jar时,我只是下载了它,然后重新编写脚本。

我写了一个相关的脚本,让我在我系统的所有jar中搜索特定的Java类名/文件/等。

通常,找到您每天执行的简单重复性任务并编写脚本来执行它们。你会惊讶于你能节省多少时间,以及你将学到多少。

例如,编写一个程序可以非常容易地在系统托盘中放置一个图标,该图标会根据您是否有任何新的未读电子邮件而发生变化。

答案 4 :(得分:2)

我编写了一个脚本,该脚本使用rsync备份本地驱动器上的远程目录树,然后在仅使用增量运行任意数量的运行后开始轮换备份(在mac上排序类似时间机器)。让那个吸盘运行在一些地理位置不同的机器上,并且至少对破坏数据的安全性感觉好多了。

脚本的大部分都是从其他人的bash脚本中移植出来的,因此提供了一个很好的稳定功能范围,可以看看一些实用程序shell脚本会给你一个想法,将它“翻译”成python ,从而使其更具可扩展性和可读性。

您可以查看bitbucket上的repo

答案 5 :(得分:2)

我还写了一个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完成的事情(很容易)。

答案 6 :(得分:2)

我最常用的两个自制的小文本工具是“sum”和“checkUTF8”。第一个是对标准输入文件中的数字(每行一个)求和的过滤器,如下所示:

$ grep '[0-9.]' somefile | sum
567567
$ wc -l * | sum
45647

......不用说,我做了很多探索性的日志处理。

第二个检查文本文件是否在UTF8中正确编码,如果没有,则显示问题行的行号,字节偏移量,字符偏移量和实际文本,并突出显示问题区域的开头。如果需要,这可以使用十六进制编辑器来纠正问题。现在问题比从iso8859-1转换为utf8要少得多,但它仍然会发生。

虽然“sum”很容易用任何脚本语言制作,但你需要对另一种语言提供良好的unicode支持。

答案 7 :(得分:1)

如何查看给定目录中所有文件的magic numbers,并在必要时修复文件扩展名。例如,如果一个.wav文件以“MThd”开头,那么它可能是一个以某种方式被错误命名的Midi文件。

答案 8 :(得分:1)

我为rsync编写了一个util,设置了user / group并规范了我的音乐集。是的,它可以在bash中完成,但我在bash上吮吸。

我对前雇主的一些javascript代码进行了持续的集成过程,这些代码在mercurial中使用post commit hooks来执行各种操作,例如minify / compress运行YUItest以及为生产使用做好准备所需的其他步骤。我怀疑他们还在使用它。它的建立是为了让我有些沮丧。

最近我构建了一个脚本来翻阅一堆jwc并通过graphviz生成png,显示我当前雇主代码库中所有tapestry组件之间的依赖关系。我们可能会在某些时候将其用于我们的夜晚CI。

最后,大约3年前,我更换了大约10K系列真正令人讨厌的t-sql,最终成为了一个完整的py-tk应用程序,用于将客户数据从应用程序版本迁移到另一个应用程序。

有各种各样的工具可以解压缩并从服务器日志中拉出各种东西。

其他有趣的东西。

答案 9 :(得分:1)

在Windows平台上,我围绕win32file.FindFilesW()API(来自Windows软件包的python扩展)编写了一个包装类,以有效地计算任何给定文件夹(本地或远程)的总大小。 API本身是Win32 API中FindFilesW()函数的包装器。对于我的类对象,我添加了除了获取总文件夹大小之外非常有用的其他功能。特别是,我添加了一个功能来捕获拒绝访问的文件和子文件夹的完整路径,以便我可以知道我是否得到了偏斜或真实的结果;我添加了一个功能来检索总大小达到一定量(如果我只想知道是否存在任何数据,例如1个字节,15个字节,1MB等);我添加了一个功能,继续访问拒绝错误。我这样做是因为在VBScript中(出于政治原因我最初使用它),如果遇到任何访问被拒绝错误,捕获给定文件夹总大小的能力将会失败。在Windows资源管理器外壳中,查看文件夹的属性将告诉您总大小,但如果遇到任何访问被拒绝错误则不通知您,因此可能会在您不知情的情况下扭曲大小属性。

答案 10 :(得分:1)

尝试编写一个非常简单的电子邮件客户端,作为向计算机发送特殊消息的步骤,告诉它执行特定的操作,例如运行作业,重新启动,回复某些信息等。< / p>

答案 11 :(得分:1)

看一下这本书Python for Unix and Linux System Administration。你可能会在那里找到一些灵感。

答案 12 :(得分:1)

我曾经在WinCVS上编写了一个与“清理”实用程序菜单集成的小型Python模块。它提供了一个方便的快捷方式,可以轻松删除Microsoft Visual Studio为每个项目生成的所有文件,这些文件不应置于版本控制之下,而是以某种方式提交。

答案 13 :(得分:1)

我有很多歌曲,视频和图像,我将其转储到非常直观地命名为“myfolder”的文件夹中,我尝试组织但是随着时间的推移,我在各种文件夹中发现了许多重复的歌曲,在多个地方发现了相同的图像,等等

所以我写了一个脚本,我运行删除重复的文件,这可能是一个有趣的练习。

问题Finding duplicate files and removing them确实实现了类似的脚本:)

答案 14 :(得分:1)

有许多自定义日志分析器,安装程序,版本检查程序等。有些脚本收集数据以便在Cacti或MRTG等工具中进行可视化。

您可以在Python Recipes

找到用Python编写的mamy系统实用程序

答案 15 :(得分:1)

我使用Python作为简单的统计脚本(如电池,CPU使用,内存等)来管道进入dwm中的动态栏。

与Openbox的管道菜单的后端类似。

答案 16 :(得分:1)

我制作了一个代码片段,列出了整齐列中系统上每个硬盘驱动器的总空间,剩余空间和已用空间。报告用途需要它。

还制作了一个电子邮件日志解析器,这是一个非常有趣的练习。我之前没有使用过自定义状态机,但这让我对他们潜在的应用程序非常感兴趣(几乎所有的东西都是hehe。)

答案 17 :(得分:0)

  • 一个自动unarchiver,因为我厌倦了记住所有tar标志。

    我写的是基于文件扩展名(查看os.path.splitextastring.split(".")的多个扩展名,如tar.gz),但如果失败,您可以尝试确定文件-type通过file

  • 调用subprocess命令
  • 将IP更新发送到我的no-ip和OpenDNS帐户的脚本(主要使用urllibre来检查响应)

  • 计算总磁盘空间,总使用量,总可用空间的工具,并以人类可读的术语显示。可以使用os模块,也可以解析df命令的输出(使用subprocessre模块)。您还需要编写一个函数来将字节数转换为GB / TB / etc

  • Youtube FLV文件下载程序,可能使用urllib来检索源,BeautifulSoup来解析HTML,然后urllib再次下载文件(Firefox Live HTTP Headers } addon帮助解决它如何解析flv URL)

答案 18 :(得分:0)

我写了一个脚本,收集来自71个不同地点的天气数据,并在集体和个人层面进行统计分析 - 使用 pywapi 模块进行此操作,使用常规cron自动化数据收集。 : - )