argpsrse模块
# 1.argparse功能
# 是python的命令解析的第三方包,可以直接让我们在命令行向程序里传参和修改参数
# 2.例子
# import argparse
# parser = argparse.ArgumentParser() # 创建ArgumentParser对象
# parser.add_argument('number', help='请输入数字', type=int) # 添加必选参数
# parser.add_argument('str', help="请输入字符串", type=str) # 添加必选参数
# args = parser.parse_args() # 解析参数
# print(args.number + 10)
# print(args.str)
# 然后打开命令行运行 python argparse_test.py 10 du
# 输出:20 du # 按照添加参数的顺序输入参数,要不然会报错
# 输入:python argparse_test.py -h 会输出所有的提示信息
# 3.可选参数(与默认值default)、必选参数
# import argparse
# parser = argparse.ArgumentParser() # 创建ArgumentParser对象
# subparser = parser.add_subparsers(title = 'subcommands', description='')
# parser.add_argument('--number', help='请输入数字', type=int) # 添加可选参数
# parser.add_argument('--str', help="请输入字符串", type=str, default= 'hello', required=True) # 添加可选参数
# # required=true时变为了必选参数
# # default='xxxx' 可选参数,不输入参数时会输出默认值
# args = parser.parse_args() # 解析参数
# print(args)
# print(args.number + 10)
# print(args.str)
# 打开命令行运行python argparse_test.py --number=3 --str='du'
# 可选参数命令行输入时得用 --xxx=ooo 格式
# 输出:Namespace(number=3, str="'du'")
# 4. action
# import argparse
# parser = argparse.ArgumentParser() # 创建ArgumentParser对象
# parser.add_argument('--xxx', help='请输入', action='store_true')
# args = parser.parse_args() # 解析参数
# print(args.xxx)
# action=‘store_true’,在运行时该变量不需要传入参数(且不能传入参数),只要写明该变量他就自动就变为True,如果不写该变量则为False
# 打开命令行运行 python argparse_test.py --xxx 输出:True
configparser模块
# read_ini.py
import configparser
config = configparser.ConfigParser()
config.read('test.ini')
# 1.获取sections
print(config.sections()) # ['section1', 'section2']
# 2.获取某一section下的所有options
print(config.options('section1')) # ['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
# 3.获取items
print(config.items('section1')) # [('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
# 4.获取具体的值
res = config.get('section1', 'user')
print(res) # egon
res = config.getint('section1', 'age') # 18
print(res)
res = config.getboolean('section1', 'is_admin')
print(res) # True
res = config.getfloat('section1', 'salary')
print(res) # 31.0
# test.ini
[section1]
k1 = v1
k2: v2
user = egon
age = 18
is_admin = true
salary = 31
[section2]
k1 = v1
quene模块
import queue
q= queue.Queue()
for i in range(5):
q.put(6)
print(q.qsize())
Threading模块
# 1. 多线程 join
import threading
import time
# def thread_job():
# print('t1 start')
# for i in range(5):
# print(i)
# time.sleep(0.1)
# print('t1 end')
# t = threading.Thread(target=thread_job, name='t1')
# t.start()
# t.join() # 等待子线程t执行完毕,再执行后边代码
# print('all done...')
# 2. 多线程的Quene功能
import threading
from queue import Queue
def job(l, q):
for i in range(len(l)):
l[i] = l[i] ** 2
q.put(l) # 将计算结果放到q
def multiThreading():
q = Queue()
threads = [] # 装四个线程
data = [[1, 2, 3], [4, 5, 6], [6, 6, 6], [8, 8, 8]]
for i in range(4): # 运行四个线程
t = threading.Thread(target=job, args=(data[i], q))
t.start()
threads.append(t)
for thread in threads:
thread.join()
results = [] # 将结果从q队列中取出,放到result并输出、
for _ in range(4):
results.append(q.get())
print('The results is: {}'.format(results))
if __name__ == "__main__":
multiThreading()
# 3. 多线程GIL锁
import threading
from queue import Queue
import copy
import time
# def job(l, q):
# res = sum(l)
# q.put(res)
#
# def multithreading(l):
# q = Queue()
# threads = []
# for i in range(4):
# t = threading.Thread(target=job, args=(copy.copy(l), q), name='T%i' % i)
# t.start()
# threads.append(t)
# [t.join() for t in threads]
# total = 0
# for _ in range(4):
# total += q.get()
# print(total)
# def normal(l):
# total = sum(l)
# print(total)
#
# if __name__ == '__main__':
# # 不用多线程方法
# l = list(range(1000000))
# s_t = time.time()
# normal(l * 4)
# print('normal: ', time.time() - s_t)
#
# # 用多线程方法
# s_t = time.time()
# multithreading(l)
# print('multithreading: ', time.time() - s_t)
# 4. lock锁
import threading
# 无锁
# def job1():
# global A
# for i in range(10):
# A+=1
# print('job1',A)
#
# def job2():
# global A
# for i in range(10):
# A+=10
# print('job2',A)
#
# if __name__== '__main__':
# A=0
# t1=threading.Thread(target=job1)
# t2=threading.Thread(target=job2)
# t1.start()
# t2.start()
# t1.join()
# t2.join()
import threading
# 有锁
# def job1():
# global A,lock
# lock.acquire()4
# for i in range(10):
# A+=1
# print('job1',A)
# lock.release()
#
# def job2():
# global A,lock
# lock.acquire()
# for i in range(10):
# A+=10
# print('job2',A)
# lock.release()
#
# if __name__== '__main__':
# lock=threading.Lock()
# A=0
# t1=threading.Thread(target=job1)
# t2=threading.Thread(target=job2)
# t1.start()
# t2.start()
# t1.join()
# t2.join()
subprocess模块
import subprocess
res1 = subprocess.Popen(
"dir | findstr html*", # 使用管道符号运行命令
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
result = res1.stdout.read()
result= str(result,encoding="gbk")
print(result)