当前位置 : 主页 > 编程语言 > python >

Python从门到精通(一):基础-附-开发一个python脚本

来源:互联网 收集:自由互联 发布时间:2022-06-27
一、基础内容 本章中介绍一个编写脚本可能用到的一个方法 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 fileinput

with fileinput.input('/etc/passwd') as f:
for line in f:
print(f.filename(), f.lineno(), line, end='')

1.2、程序退出

import sys
sys.stderr.write('It failed!\n')
raise SystemExit(1)

1.3、密码验证

import getpass

user = 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 subprocess

out_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 webbrowser

webbrowser.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 signal
import 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
上一篇:Python从门到精通(六):线程-04-锁
下一篇:没有了
网友评论