Python27/Tools/Scripts

pythonで UNIX コマンドの split もどき、お試しを書きながら思っていたこと。

CPython の Windows 版公式をインストールすると、Tools/Scripts が付属でついてくる。

2to3.py というなかでも重要なものがここに含まれるので、これがキッカケでこれを知る人もいるであろうが、インストールしたらすぐさま「サンプル・デモ探しにインストールフォルダに出掛ける」ことが習慣付いていないと、案外気付かない人がいるんじゃないだろうか、と思っている。

Python初学者が最初に何に飛びつけば良いかといえば、Python 2.7 からは圧倒的に公式サイトになった。2.6 まではドキュメントが Sphinx ベースでなかったこともあって、いまひとつ学習ははかどらなかったけれど、今は違う。とにかく公式サイトにまずは行くべし、と、ワタシは思う。

そうなんだけれど、「人のプログラムをまねぶ」というスタイルの学習も一方ではあって、ワタシは大抵「公式ドキュメント」よりも先に「公式デモ・サンプル」を探すことが多く、もう10年以上前になるだろうか、初めて Python に触れた際、真っ先に「PythonXx/Tools/Scripts」に飛びついた。

Windows 版での「Tools/Scripts」は、ソース配布物における「Tools/scripts」にあたる。ただ残念ながら、linux などで標準パッケージを yum や rpm などで素直にインストールするだけでは、これらはインストールされないようである。また、「Demos」も、ソース配布物にしか含まれない。というわけで、基本的には、一度はソース配布物を入手してみると良いと思う。

pythonで UNIX コマンドの split もどき、お試しを書きつつ頭にあったのは実はこの Tools/Scripts で、というのも、Tools/Scripts の中には「pythonで UNIX コマンドの split もどき」に近いノリのものがいくつか含まれていて、それこそ「UNIXライクな環境は何一つ手持ちでないプアな環境だが Python だけ持っている」場合に、少しだけ役に立つ。例えば md5sum。全体では、README を全部載せてしまうが

 1 This directory contains a collection of executable Python scripts that
 2 are useful while building, extending or managing Python.  Some (e.g.,
 3 dutree or lll) are also generally useful UNIX tools.
 4 
 5 See also the Demo/scripts directory!
 6 
 7 analyze_dxp.py      Analyzes the result of sys.getdxp()
 8 byext.py        Print lines/words/chars stats of files by extension
 9 byteyears.py        Print product of a file's size and age
10 checkappend.py      Search for multi-argument .append() calls
11 checkpyc.py     Check presence and validity of ".pyc" files
12 classfix.py     Convert old class syntax to new
13 cleanfuture.py      Fix reduntant Python __future__ statements
14 combinerefs.py      A helper for analyzing PYTHONDUMPREFS output.
15 copytime.py     Copy one file's atime and mtime to another
16 crlf.py         Change CRLF line endings to LF (Windows to Unix)
17 cvsfiles.py     Print a list of files that are under CVS
18 db2pickle.py        Dump a database file to a pickle
19 diff.py         Print file diffs in context, unified, or ndiff formats
20 dutree.py       Format du(1) output as a tree sorted by size
21 eptags.py       Create Emacs TAGS file for Python modules
22 find_recursionlimit.py  Find the maximum recursion limit on this machine 
23 finddiv.py      A grep-like tool that looks for division operators
24 findlinksto.py      Recursively find symbolic links to a given path prefix
25 findnocoding.py     Find source files which need an encoding declaration
26 fixcid.py       Massive identifier substitution on C source files
27 fixdiv.py       Tool to fix division operators.
28 fixheader.py        Add some cpp magic to a C include file
29 fixnotice.py        Fix the copyright notice in source files
30 fixps.py        Fix Python scripts' first line (if #!)
31 ftpmirror.py        FTP mirror script
32 google.py       Open a webbrowser with Google
33 gprof2html.py       Transform gprof(1) output into useful HTML
34 h2py.py         Translate #define's into Python assignments
35 hotshotmain.py      Main program to run script under control of hotshot
36 idle            Main program to start IDLE
37 ifdef.py        Remove #if(n)def groups from C sources
38 lfcr.py         Change LF line endings to CRLF (Unix to Windows)
39 linktree.py     Make a copy of a tree with links to original files
40 lll.py          Find and list symbolic links in current directory
41 logmerge.py     Consolidate CVS/RCS logs read from stdin
42 mailerdaemon.py     parse error messages from mailer daemons (Sjoerd&Jack)
43 md5sum.py       Print MD5 checksums of argument files.
44 methfix.py      Fix old method syntax def f(self, (a1, ..., aN)):
45 mkreal.py       Turn a symbolic link into a real file or directory
46 ndiff.py        Intelligent diff between text files (Tim Peters)
47 nm2def.py       Create a template for PC/python_nt.def (Marc Lemburg)
48 objgraph.py     Print object graph from nm output on a library
49 parseentities.py    Utility for parsing HTML entity definitions
50 pathfix.py      Change #!/usr/local/bin/python into something else
51 pdeps.py        Print dependencies between Python modules
52 pickle2db.py        Load a pickle generated by db2pickle.py to a database
53 pindent.py      Indent Python code, giving block-closing comments
54 ptags.py        Create vi tags file for Python modules
55 pydoc           Python documentation browser.
56 pysource.py     Find Python source files
57 redemo.py       Basic regular expression demonstration facility
58 reindent.py     Change .py files to use 4-space indents.
59 rgrep.py        Reverse grep through a file (useful for big logfiles)
60 serve.py        Small wsgiref-based web server, used in make serve in Doc
61 setup.py        Install all scripts listed here
62 suff.py         Sort a list of files by suffix
63 svneol.py       Sets svn:eol-style on all files in directory
64 texcheck.py             Validate Python LaTeX formatting (Raymond Hettinger)
65 texi2html.py        Convert GNU texinfo files into HTML
66 treesync.py     Synchronize source trees (very ideosyncratic)
67 untabify.py     Replace tabs with spaces in argument files
68 which.py        Find a program in $PATH
69 xxci.py         Wrapper for rcsdiff and ci

という具合。全部が大喜び出来て使えるというものでもなくて、単なる歴史的異物や UNIX 系でしか利用できないものも含まれているので、過度の期待はしないで頂くとして、それでもなお、一度は目を通しておくと良いと思う。