一、基础内容 本章中介绍一个编写脚本可能用到的一个方法 1.1、脚本接收 import fileinput with fileinput . input ( '/etc/passwd' ) as f : for line in f : print ( f . filename (), f . lineno (), line , end = '' ) 1.
一、基础内容
本章中介绍一个编写脚本可能用到的一个方法
1.1、脚本接收
import fileinputwith fileinput.input('/etc/passwd') as f:
for line in f:
print(f.filename(), f.lineno(), line, end='')
1.2、程序退出
import syssys.stderr.write('It failed!\n')
raise SystemExit(1)
1.3、密码验证
import getpassuser = getpass.getuser()
#这行会提示输入明文密码,是否明文这与系统有关
passwd = getpass.getpass()
# for show the use of getpass
def svc_login(user, passwd):
return True
if svc_login(user, passwd):
print('Success!')
else:
print('Fail!')
user = input('Enter your username: ')
1.5、执行Linux命令
import subprocessout_bytes = subprocess.check_output(['netstat','-a'])
out_text = out_bytes.decode('utf-8')
#异常处理
try:
out_bytes = subprocess.check_output(['cmd','arg1','arg2'])
except subprocess.CalledProcessError as e:
out_bytes = e.output # Output generated before error
code = e.returncode # Return code
#同时收集标准输出和错误
out_bytes = subprocess.check_output(['cmd','arg1','arg2'],
stderr=subprocess.STDOUT)
#设置超时机制
try:
out_bytes = subprocess.check_output(['cmd','arg1','arg2'], timeout=5)
except subprocess.TimeoutExpired as e:
...
#让命令在shell环境中执行
out_bytes = subprocess.check_output('grep python | wc > out', shell=True)
#如需更复杂的交互可使用pexpect模块
1.6、打开浏览器
import webbrowserwebbrowser.open('http://www.python.org')
webbrowser.open_new('http://www.python.org')
webbrowser.open_new_tab('http://www.python.org')
c = webbrowser.get('chrome')
c.open('http://www.python.org')
c.open_new_tab('http://docs.python.org')
二、资源限制
import signalimport resource
import os
def time_exceeded(signo, frame):
print("Time's up!")
raise SystemExit(1)
def set_max_runtime(seconds):
# Install the signal handler and set a resource limit
soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
signal.signal(signal.SIGXCPU, time_exceeded)
if __name__ == '__main__':
set_max_runtime(20)
while True:
pass
def limit_memory(maxsize):
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))
if __name__ == '__main__':
limit_memory(1)
set_max_runtime(20)
while True:
pass
三、命令行解析器
import argparse# 创建一个ArgumentParser实例
parser = argparse.ArgumentParser(description='Search some files')
#声明支持的选项:
# dest:指定解析结果被指派给属性的名字;
# metavar :用来生成帮助信息
# action:指定与属性对应的处理逻辑,通常为store
#用来构造一个文件名列表
parser.add_argument(dest='filenames',metavar='filename', nargs='*')
#'-p', '--pat':表示用哪个参数名都行,
parser.add_argument('-p', '--pat',metavar='pattern', required=True,
dest='patterns', action='append',
help='text pattern to search for')
#根据action参数是否存在设置boolean标志
parser.add_argument('-v', dest='verbose', action='store_true',
help='verbose mode')
#接收一个单独的值,并将其存储为字符串
parser.add_argument('-o', dest='outfile', action='store',
help='output file')
#choices可选值
parser.add_argument('--speed', dest='speed', action='store',
choices={'slow','fast'}, default='slow',
help='search speed')
#处理sys.argv的值并返回一个结果实例
args = parser.parse_args()
执行 python orderParser.py -h 输出如下:
usage: order_parser.py [-h] -p pattern [-v] [-o OUTFILE] [--speed {slow,fast}][filename ...]
Search some files
positional arguments:
filename
optional arguments:
-h, --help show this help message and exit
-p pattern, --pat pattern
text pattern to search for
-v verbose mode
-o OUTFILE output file
--speed {slow,fast} search speed