`
splayx
  • 浏览: 82742 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python扫盲0

 
阅读更多

hello world太简单,看不出语法,写个长点的,也算对python的语法有大概的了解了,哈哈哈。

功能:root是找到没有被包含的头文件,allh是看一个源文件都包含了哪些头文件。

没啥用,当练手。

 
#!/usr/bin/python

#python code practice for include discovery


import os

pre = "#include"

def compact(str):
	#local variable assignment before referenced
	l = len(str)
	i = 0
	res = ""
	while i < l:
		if str[i] != ' ' and str[i] != '\n':
			res += str[i]
		i = i + 1
	return res

def geth_in_str(str):
	res = set()		#init set
	l0 = len(str)
	l1 = len(pre)
	i = 0
	while i + l1 + 2 <= l0:
		c = 'x'
		if str[i + l1] == '"':
			c = '"'
		elif str[i + l1] == '<':
			c = '>'
		else:
			i = i + 1
			continue

		if str[i : i + l1] == pre:
		#substr[i, i + l1)
			j = i + l1 + 1
			while j < l0:
				if str[j] == c:
					res.add(str[i + l1 + 1 : j])
					break
				j = j + 1
			if j < l0:
				i = j
		i = i + 1
	return res

def geth_in_file(fn):
	fd = open(fn, "r")
	text = fd.read()
	text = compact(text)
	res = geth_in_str(text)
	fd.close()
	return res

def print_hset(hs):
	for e in hs:
		print e

def hroot(dn):
	all = set()
	ex_all = set()
	tp = os.walk(dn).next()
	#to generates tuples (parent, dirnames, filenames),
	#and .next() to get the first

	for file in tp[2]:
		l = len(file)
		if l > 1 and file[l - 1] == 'h' and file[l - 2] == '.':
			all.add(file)
			ex_all = ex_all | geth_in_file(file)
			#set operation
	print ex_all
	res = all - ex_all
	return res

def main():
	print "h helper begin...."

	while True:
		cmd = raw_input("input cmd:\n")
		#raw_input a string, and input a int or float
		if cmd == "q" or cmd == "quit":
			break
		
		if cmd == "root":
		#show .hs in the dir of which is not included
			dn = raw_input("input dir:\n")
			print
			res = hroot(dn)
			print_hset(res)

		elif cmd == "allh":
		#show .hs included by the file
			fn = raw_input("input file:\n")
			print
			res = geth_in_file(fn)
			print_hset(res)
		print


if __name__ == "__main__":
	main()

 
root@152.41 hnet>ls
A.h  B.h  C.h  h.py
root@152.41 hnet>cat A.h
#include "B.h"
#include <C.h>
root@152.41 hnet>cat B.h
#include <iostream>
root@152.41 hnet>cat C.h
#include "sys/haha.h"
root@152.41 hnet>./h.py
h helper begin....
input cmd:
root
input dir:
./
set(['B.h', 'iostream', 'C.h', 'sys/haha.h'])
A.h
input cmd:
allh
input file:
A.h
B.h
C.h
input cmd:
allh
input file:
B.h
iostream
input cmd:
allh
input file:
C.h
sys/haha.h
 
 
补充:如果文件open太多,漏了close,程序会死掉的。
root@152.41 test>ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 210944
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 131072
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
 这里可以看到最多可以打开65535个file。
可以用ulimit -n xxx进行修改。这个没啥好改的,栈大小可以改改。
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics