mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Initial revision
This commit is contained in:
parent
0481447f41
commit
ec758ead39
16 changed files with 1007 additions and 0 deletions
18
Demo/scripts/README
Normal file
18
Demo/scripts/README
Normal file
|
@ -0,0 +1,18 @@
|
|||
Contents of this directory:
|
||||
|
||||
byteyears.py Print product of a file's size and age
|
||||
eptags.py Create Emacs TAGS file for Python modules
|
||||
fact.py Factorize numbers
|
||||
findlinksto.py Find symbolic links to a given path (prefix)
|
||||
from.py Summarize mailbox
|
||||
lfact.py Factorize long numbers
|
||||
lpwatch.py Watch BSD line printer queues
|
||||
mkreal.py Turn a symbolic link into a real file or directory
|
||||
objgraph.py Print object graph from nm output on a library
|
||||
pdeps.py Print dependencies between Python modules
|
||||
pi.py Print digits of pi (uses arbitrary precision integers)
|
||||
primes.py Print prime numbers
|
||||
ptags.py Create vi tags file for Python modules
|
||||
suff.py Sort a list of files by suffix
|
||||
which.py Find a program in $PATH
|
||||
xxci.py Wrapper for rcsdiff and ci
|
45
Demo/scripts/fact.py
Executable file
45
Demo/scripts/fact.py
Executable file
|
@ -0,0 +1,45 @@
|
|||
#! /usr/local/python
|
||||
|
||||
# Factorize numbers, slowly.
|
||||
# This version uses plain integers and is thus limited to 2**31-1.
|
||||
|
||||
import sys
|
||||
from math import sqrt
|
||||
|
||||
error = 'fact.error' # exception
|
||||
|
||||
def fact(n):
|
||||
if n < 1: raise error # fact() argument should be >= 1
|
||||
if n = 1: return [] # special case
|
||||
res = []
|
||||
# Treat even factors special, so we can use i = i+2 later
|
||||
while n%2 = 0:
|
||||
res.append(2)
|
||||
n = n/2
|
||||
# Try odd numbers up to sqrt(n)
|
||||
limit = int(sqrt(float(n+1)))
|
||||
i = 3
|
||||
while i <= limit:
|
||||
if n%i = 0:
|
||||
res.append(i)
|
||||
n = n/i
|
||||
limit = int(sqrt(float(n+1)))
|
||||
else:
|
||||
i = i+2
|
||||
res.append(n)
|
||||
return res
|
||||
|
||||
def main():
|
||||
if len(sys.argv) > 1:
|
||||
for arg in sys.argv[1:]:
|
||||
n = int(eval(arg))
|
||||
print n, fact(n)
|
||||
else:
|
||||
try:
|
||||
while 1:
|
||||
n = int(input())
|
||||
print n, fact(n)
|
||||
except EOFError:
|
||||
pass
|
||||
|
||||
main()
|
25
Demo/scripts/from.py
Executable file
25
Demo/scripts/from.py
Executable file
|
@ -0,0 +1,25 @@
|
|||
#! /usr/local/python
|
||||
|
||||
# Print From and Subject of messages in $MAIL.
|
||||
# Extension to multiple mailboxes and other bells & whistles are left
|
||||
# as exercises for the reader.
|
||||
|
||||
import posix
|
||||
|
||||
# Open mailbox file. Exits with exception when this fails.
|
||||
|
||||
mail = open(posix.environ['MAIL'], 'r')
|
||||
|
||||
while 1:
|
||||
line = mail.readline()
|
||||
if not line: break # EOF
|
||||
if line[:5] = 'From ':
|
||||
# Start of message found
|
||||
print line[:-1],
|
||||
while 1:
|
||||
line = mail.readline()
|
||||
if not line: break # EOF
|
||||
if line = '\n': break # Blank line ends headers
|
||||
if line[:8] = 'Subject:':
|
||||
print `line[9:-1]`,
|
||||
print
|
111
Demo/scripts/lpwatch.py
Executable file
111
Demo/scripts/lpwatch.py
Executable file
|
@ -0,0 +1,111 @@
|
|||
#! /ufs/guido/bin/sgi/python
|
||||
#! /usr/local/python
|
||||
|
||||
# Watch line printer queue(s).
|
||||
# Intended for BSD 4.3 lpq.
|
||||
|
||||
import posix
|
||||
import sys
|
||||
import time
|
||||
import string
|
||||
|
||||
DEF_PRINTER = 'psc'
|
||||
DEF_DELAY = 10
|
||||
|
||||
def main():
|
||||
delay = DEF_DELAY # XXX Use getopt() later
|
||||
try:
|
||||
thisuser = posix.environ['LOGNAME']
|
||||
except:
|
||||
thisuser = posix.environ['USER']
|
||||
printers = sys.argv[1:]
|
||||
if not printers:
|
||||
if posix.environ.has_key('PRINTER'):
|
||||
printers = [posix.environ['PRINTER']]
|
||||
else:
|
||||
printers = [DEF_PRINTER]
|
||||
#
|
||||
clearhome = posix.popen('clear', 'r').read()
|
||||
#
|
||||
while 1:
|
||||
# Pipe output through cat for extra buffering,
|
||||
# so the output (which overwrites the previous)
|
||||
# appears instantaneous.
|
||||
sys.stdout = posix.popen('exec cat', 'w')
|
||||
sys.stdout.write(clearhome)
|
||||
for name in printers:
|
||||
pipe = posix.popen('lpq -P' + name + ' 2>&1', 'r')
|
||||
showstatus(name, pipe, thisuser)
|
||||
sts = pipe.close()
|
||||
if sts:
|
||||
print name + ': *** lpq exit status', sts
|
||||
sts = sys.stdout.close()
|
||||
time.sleep(delay)
|
||||
|
||||
def showstatus(name, pipe, thisuser):
|
||||
lines = 0
|
||||
users = {}
|
||||
aheadbytes = 0
|
||||
aheadjobs = 0
|
||||
userseen = 0
|
||||
totalbytes = 0
|
||||
totaljobs = 0
|
||||
while 1:
|
||||
line = pipe.readline()
|
||||
if not line: break
|
||||
fields = string.split(line)
|
||||
n = len(fields)
|
||||
if len(fields) >= 6 and fields[n-1] = 'bytes':
|
||||
rank = fields[0]
|
||||
user = fields[1]
|
||||
job = fields[2]
|
||||
files = fields[3:-2]
|
||||
bytes = eval(fields[n-2])
|
||||
if user = thisuser:
|
||||
userseen = 1
|
||||
elif not userseen:
|
||||
aheadbytes = aheadbytes + bytes
|
||||
aheadjobs = aheadjobs + 1
|
||||
totalbytes = totalbytes + bytes
|
||||
totaljobs = totaljobs + 1
|
||||
if users.has_key(user):
|
||||
ujobs, ubytes = users[user]
|
||||
else:
|
||||
ujobs, ubytes = 0, 0
|
||||
ujobs = ujobs + 1
|
||||
ubytes = ubytes + bytes
|
||||
users[user] = ujobs, ubytes
|
||||
else:
|
||||
if fields and fields[0] <> 'Rank':
|
||||
if line[-1:] = '\n':
|
||||
line = line[:-1]
|
||||
if not lines:
|
||||
print name + ':',
|
||||
else:
|
||||
print
|
||||
print line,
|
||||
lines = lines + 1
|
||||
if totaljobs:
|
||||
if lines > 1:
|
||||
print
|
||||
lines = lines+1
|
||||
print (totalbytes+1023)/1024, 'K',
|
||||
if totaljobs <> len(users):
|
||||
print '(' + `totaljobs` + ' jobs)',
|
||||
if len(users) = 1:
|
||||
print 'for', users.keys()[0],
|
||||
else:
|
||||
print 'for', len(users), 'users',
|
||||
if userseen:
|
||||
if aheadjobs = 0:
|
||||
print '(' + thisuser + ' first)',
|
||||
else:
|
||||
print '(' + `(aheadbytes+1023)/1024`,
|
||||
print 'K before', thisuser + ')'
|
||||
if lines:
|
||||
print
|
||||
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
pass
|
30
Demo/scripts/pi.py
Executable file
30
Demo/scripts/pi.py
Executable file
|
@ -0,0 +1,30 @@
|
|||
#! /usr/local/python
|
||||
|
||||
# Print digits of pi forever.
|
||||
#
|
||||
# The algorithm, using Python's 'long' integers ("bignums"), works
|
||||
# with continued fractions, and was conceived by Lambert Meertens.
|
||||
#
|
||||
# See also the ABC Programmer's Handbook, by Geurts, Meertens & Pemberton,
|
||||
# published by Prentice-Hall (UK) Ltd., 1990.
|
||||
|
||||
import sys
|
||||
|
||||
def main():
|
||||
k, a, b, a1, b1 = 2l, 4l, 1l, 12l, 4l
|
||||
while 1:
|
||||
# Next approximation
|
||||
p, q, k = k*k, 2l*k+1l, k+1l
|
||||
a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
|
||||
# Print common digits
|
||||
d, d1 = a/b, a1/b1
|
||||
#print a, b, a1, b1
|
||||
while d = d1:
|
||||
# Use write() to avoid spaces between the digits
|
||||
sys.stdout.write(`int(d)`)
|
||||
# Flush so the output is seen immediately
|
||||
sys.stdout.flush()
|
||||
a, a1 = 10l*(a%b), 10l*(a1%b1)
|
||||
d, d1 = a/b, a1/b1
|
||||
|
||||
main()
|
26
Demo/scripts/primes.py
Executable file
26
Demo/scripts/primes.py
Executable file
|
@ -0,0 +1,26 @@
|
|||
#! /usr/local/python
|
||||
|
||||
# Print prime numbers in a given range
|
||||
|
||||
def main():
|
||||
import sys
|
||||
min, max = 2, 0x7fffffff
|
||||
if sys.argv[1:]:
|
||||
min = int(eval(sys.argv[1]))
|
||||
if sys.argv[2:]:
|
||||
max = int(eval(sys.argv[2]))
|
||||
primes(min, max)
|
||||
|
||||
def primes(min, max):
|
||||
if 2 >= min: print 2
|
||||
primes = [2]
|
||||
i = 3
|
||||
while i <= max:
|
||||
for p in primes:
|
||||
if i%p = 0 or p*p > i: break
|
||||
if i%p <> 0:
|
||||
primes.append(i)
|
||||
if i >= min: print i
|
||||
i = i+2
|
||||
|
||||
main()
|
Loading…
Add table
Add a link
Reference in a new issue