仅需5道题轻松掌握Python命令行相关标准库 | Python技能树征题

  • 0. 前言
  • 1. 第 1 题:命令行日志记录
  • 2. 第 2 题:将日志存储在磁盘上
  • 3. 第 3 题:命令行参数解析
  • 4. 第 4 题:运行系统命令
  • 5. 第 5 题:命令行中进度条显示
  • 试题代码地址

0. 前言

许多用户习惯于使用命令行工具与系统进行交互,因此 Python 中的提供了相应的标准库,用于向通过 shell 和文本与用户进行交互的软件提供常见方法和函数,我们就通过 5Python 编程题来掌握 Python 相关标准库玩转命令行!

1. 第 1 题:命令行日志记录

知识点描述:使用 Python logging 模块记录运行信息。
问题描述:默认情况下 logging 模块只会输出错误信息,如何使 logging 记录程序运行中包括警告等更普通的运行信息,请从以下选项中选出你认为正确的答案:
A.

import logging, sys
logging.basicConfig(level=logging.INFO, stream=sys.stderr, format='%(asctime)s %(name)s %(levelname)s %(message)s')
log = logging.getLogger(__name__)
def my_add(a, b, weight=1):log.info('Starting add')if a == b == 0:log.warning('Warning! 0 for any one')res = (a + b) * weightlog.info('(%s + %s) * %s = %s' % (a, b, weight, res))print(res)
if __name__ == '__main__':my_add(5, 3)my_add(0, 0)

B.

import logging, sys
logging.basicConfig(level=logging.ERROR, stream=sys.stderr, format='%(asctime)s %(name)s %(levelname)s %(message)s')
log = logging.getLogger(__name__)
def my_add(a, b, weight=1):log.info('Starting add')if a == b == 0:log.warning('Warning! 0 for any one')res = (a + b) * weightlog.info('(%s + %s) * %s = %s' % (a, b, weight, res))print(res)
if __name__ == '__main__':my_add(5, 3)my_add(0, 0)

C.

import logging, sys
logging.basicConfig(level=logging.NOTSET, stream=sys.stderr, format='%(asctime)s %(name)s %(levelname)s %(message)s')
log = logging.getLogger(__name__)
def my_add(a, b, weight=1):log.info('Starting add')if a == b == 0:log.warning('Warning! 0 for any one')res = (a + b) * weightlog.info('(%s + %s) * %s = %s' % (a, b, weight, res))print(res)
if __name__ == '__main__':my_add(5, 3)my_add(0, 0)

D.

import logging, sys
logging.basicConfig(level=logging.WARN, stream=sys.stderr, format='%(asctime)s %(name)s %(levelname)s %(message)s')
log = logging.getLogger(__name__)
def my_add(a, b, weight=1):log.info('Starting add')if a == b == 0:log.warning('Warning! 0 for any one')res = (a + b) * weightlog.info('(%s + %s) * %s = %s' % (a, b, weight, res))print(res)
if __name__ == '__main__':my_add(5, 3)my_add(0, 0)

正确答案: A

2. 第 2 题:将日志存储在磁盘上

知识点描述:将日志信息写入磁盘文件中。
问题描述:编写斐波那契计算函数,并用日志文件记录计算出的数字以及运行时间,请从以下选项中选出你认为正确的答案:
A.

import logging, sys
import datetime
def f(n):log.info('Computing up to %sth fibonacci number', n)a, b = 0, 1for n in range(n):a, b = b, a+bprint(b, '', end='')print(b)
logging_file = 'log.txt'
logging.basicConfig(level=logging.WARN, filename=logging_file, format='%(asctime)s %(name)s %(levelname)s: %(message)s')
log = logging.getLogger(__name__)
if __name__ == '__main__':f(datetime.datetime.now().second)

B.

import logging, sys
import datetime
def f(n):log.info('Computing up to %sth fibonacci number', n)a, b = 0, 1for n in range(n):a, b = b, a+bprint(b, '', end='')print(b)
logging_file = 'log.txt'
logging.basicConfig(level=logging.WARN, format='%(asctime)s %(name)s %(levelname)s: %(message)s')
log = logging.getLogger(__name__)
if __name__ == '__main__':f(datetime.datetime.now().second)

C.

import logging, sys
import datetime
def f(n):log.info('Computing up to %sth fibonacci number', n)a, b = 0, 1for n in range(n):a, b = b, a+bprint(b, '', end='')print(b)
logging_file = 'log.txt'
logging.basicConfig(level=logging.INFO, filename=logging_file, format='%(asctime)s %(name)s %(levelname)s: %(message)s')
log = logging.getLogger(__name__)
if __name__ == '__main__':f(datetime.datetime.now().second)

D.

import logging, sys
import datetime
def f(n):a, b = 0, 1for n in range(n):a, b = b, a+bprint(b, '', end='')print(b)
logging_file = 'log.txt'
logging.basicConfig(level=logging.INFO, filename=logging_file, format='%(asctime)s %(name)s %(levelname)s: %(message)s')
log = logging.getLogger(__name__)
if __name__ == '__main__':f(datetime.datetime.now().second)

正确答案: C

3. 第 3 题:命令行参数解析

知识点描述:编写命令行工具,根据提供给脚本的选项参数改变程序行为。
问题描述:编写命令行工具,根据提供给脚本的选项参数可以运行多个数据间的加/减/乘/除,请从以下选项中选出你认为正确的选项:
A.

import argparse
import operator
import logging
import functools
parser = argparse.ArgumentParser(description='Applies an operation to one or more numbers')
parser.add_argument("number", help="One or more numbers to perform an operation on.", type=int)
parser.add_argument('-o', '--operation', help="The operation to perform on numbers.", choices=['add', 'sub', 'mul', 'div'], default='add')
parser.add_argument("-v", "--verbose", action="store_true", help="increase output verbosity")
opts = parser.parse_args()
logging.basicConfig(level=logging.INFO if opts.verbose else logging.WARNING)
log = logging.getLogger()
operation = getattr(operator, opts.operation)
log.info('Applying %s to %s', opts.operation, opts.number)
print(functools.reduce(operation, opts.number))

B.

import argparse
import operator
import logging
import functools
parser = argparse.ArgumentParser(description='Applies an operation to one or more numbers')
parser.add_argument("number", help="One or more numbers to perform an operation on.", nargs='+')
parser.add_argument('-o', '--operation', help="The operation to perform on numbers.", choices=['add', 'sub', 'mul', 'div'], default='add')
parser.add_argument("-v", "--verbose", action="store_true", help="increase output verbosity")
opts = parser.parse_args()
logging.basicConfig(level=logging.INFO if opts.verbose else logging.WARNING)
log = logging.getLogger()
operation = getattr(operator, opts.operation)
log.info('Applying %s to %s', opts.operation, opts.number)
print(functools.reduce(operation, opts.number))

C.

import argparse
import operator
import logging
import functools
parser = argparse.ArgumentParser(description='Applies an operation to one or more numbers')
parser.add_argument("number", help="One or more numbers to perform an operation on.", nargs='2', type=int)
parser.add_argument('-o', '--operation', help="The operation to perform on numbers.", choices=['add', 'sub', 'mul', 'div'], default='add')
parser.add_argument("-v", "--verbose", action="store_true", help="increase output verbosity")
opts = parser.parse_args()
logging.basicConfig(level=logging.INFO if opts.verbose else logging.WARNING)
log = logging.getLogger()
operation = getattr(operator, opts.operation)
log.info('Applying %s to %s', opts.operation, opts.number)
print(functools.reduce(operation, opts.number))

D.

import argparse
import operator
import logging
import functools
parser = argparse.ArgumentParser(description='Applies an operation to one or more numbers')
parser.add_argument("number", help="One or more numbers to perform an operation on.", nargs='+', type=int)
parser.add_argument('-o', '--operation', help="The operation to perform on numbers.", choices=['add', 'sub', 'mul', 'div'], default='add')
parser.add_argument("-v", "--verbose", action="store_true", help="increase output verbosity")
opts = parser.parse_args()
logging.basicConfig(level=logging.INFO if opts.verbose else logging.WARNING)
log = logging.getLogger()
operation = getattr(operator, opts.operation)
log.info('Applying %s to %s', opts.operation, opts.number)
print(functools.reduce(operation, opts.number))

正确答案: D

4. 第 4 题:运行系统命令

知识点描述:在编写系统运维工具时,调用系统命令。

问题描述:编写 Linux 系统运维工具,调用系统命令查看 “/” 目录下文件,请从以下选项中选出你认为正确的选项:
A.

import shlex
import subprocess
def run(command):try:result = subprocess.getstatusoutput(command, shell=shlex.split(command), stderr=subprocess.STDOUT)return 0, resultexcept subprocess.CalledProcessError as e:return e.returncode, e.output
status, out = run('ls "/"')
print(status, out)

B.

import shlex
import subprocess
def run(command):try:result = subprocess.check_output(command, shell=shlex.split(command), stderr=subprocess.STDOUT)return 0, resultexcept subprocess.CalledProcessError as e:return e.returncode, e.output
status, out = run('ls "/"')
print(status, out)

C.

import gzip
text = 'text.txt'
with open(text, 'rt') as file:read_text = file.read()with gzip.open('compress.gz', 'wt', compresslevel = 9) as f:f.write(read_text)

D.

import gzip
text = 'text.txt'
with open(text, 'rt') as file:read_text = file.read()with gzip.open('compress.gz', 'wt', compresslevel = 0) as f:f.write(read_text)

正确答案:B

5. 第 5 题:命令行中进度条显示

知识点描述:使用进度条显示当前任务完成进度。
问题描述:在执行耗时任务时,使用进度条显示已经完成了的任务进度,请从以下选项中选出你认为正确的选项:
A.

import shutil, sys
import time
def progressbar(func):def _func_with_progress(*args, **kwargs):max_width, _ = shutil.get_terminal_size()gen = func(*args, **kwargs)while True:try:progress = next(gen)except StopIteration as exc:sys.stdout.write('\n')return exc.valueelse:message = '[%s] {}%%'.format(progress)bar_width = max_width - len(message) + 3  filled = int(round(bar_width / 100.0 * progress))spaceleft = bar_width - filledbar = '=' * filled + ' ' * spaceleftsys.stdout.write((message+'\r') % bar)sys.stdout.flush()
@progressbar
def wait(seconds):start = time.time()step = seconds / 100.for i in range(1, 101):time.sleep(step)yield ireturn time.time() - start
if __name__ == '__main__':print("Waiting", wait(4))

B.

import shutil, sys
import time
def progressbar(func):def _func_with_progress(*args, **kwargs):max_width, _ = shutil.get_terminal_size()gen = func(*args, **kwargs)while True:try:progress = next(gen)except StopIteration as exc:sys.stdout.write('\n')return exc.valueelse:message = '[%s] {}%%'.format(progress)bar_width = max_width - len(message) + 3  filled = int(round(bar_width / 100.0 * progress))spaceleft = bar_width - filledbar = '=' * filled + ' ' * spaceleftsys.stdout.write((message+'\r') % bar)sys.stdout.flush()return _func_with_progress
@progressbar
def wait(seconds):start = time.time()step = seconds / 100.for i in range(1, 101):time.sleep(step)return time.time() - start
if __name__ == '__main__':print("Waiting", wait(4))

C.

import shutil, sys
import time
def progressbar(func):def _func_with_progress(*args, **kwargs):max_width, _ = shutil.get_terminal_size()gen = func(*args, **kwargs)while True:try:progress = next(gen)except StopIteration as exc:sys.stdout.write('\n')return exc.valueelse:message = '[%s] {}%%'.format(progress)bar_width = max_width - len(message) + 3  filled = int(round(bar_width / 100.0 * progress))spaceleft = bar_width - filledbar = '=' * filled + ' ' * spaceleftsys.stdout.write((message+'\r') % bar)sys.stdout.flush()return _func_with_progress
@progressbar
def wait(seconds):start = time.time()step = seconds / 100.for i in range(1, 101):time.sleep(step)yield ireturn time.time() - start
if __name__ == '__main__':print("Waiting", wait(4))

D.

import shutil, sys
import time
def progressbar(func):def _func_with_progress(*args, **kwargs):max_width, _ = shutil.get_terminal_size()gen = func(*args, **kwargs)while True:try:progress = next(gen)except StopIteration as exc:sys.stdout.write('\n')return exc.valueelse:message = '[%s] {}%%'.format(progress)bar_width = max_width - len(message) + 3  filled = int(round(bar_width / 100.0 * progress))spaceleft = bar_width - filledbar = '=' * filled + ' ' * spaceleftsys.stdout.write((message+'\r') % bar)sys.stdout.flush()return _func_with_progress()
@progressbar
def wait(seconds):start = time.time()step = seconds / 100.for i in range(1, 101):time.sleep(step)yield ireturn time.time() - start
if __name__ == '__main__':print("Waiting", wait(4))

正确答案:C

试题代码地址

https://codechina.csdn.net/LOVEmy134611/python_problem

仅需5道题轻松掌握Python命令行相关标准库 | Python技能树征题相关推荐

  1. 仅需6道题轻松掌握SciPy空间计算基础 | Python技能树征题

    仅需6道题轻松掌握SciPy空间计算基础 | Python技能树征题 0. 前言 1. 第 1 题:三角剖分 2. 第 2 题:凸包 3. 第 3 题:K-D树 4. 第 4 题:曼哈顿距离 5. 第 ...

  2. 仅需6道题轻松掌握Python异常捕获 | Python技能树征题

    仅需6道题轻松掌握Python异常捕获 | Python技能树征题 0. 前言 1. 第 1 题:在单元测试中测试异常 2. 第 2 题:多个异常的处理 3. 第 3 题:捕获所有异常 4. 第 4 ...

  3. 仅需8道题轻松掌握Python Web应用开发 | Python技能树征题

    仅需9道题轻松掌握Python Web应用开发 | Python技能树征题 0. 前言 1. 第 1 题:客户端访问 Web 服务器 2. 第 2 题:构建 TCP 服务器 3. 第 3 题:构建 U ...

  4. 仅需10道题轻松掌握Python文件处理 | Python技能树征题

    仅需10道题轻松掌握Python文件处理 | Python技能树征题 0. 前言 1. 第 1 题:文件路径名的处理 2. 第 2 题:检测文件是否存在 3. 第 3 题:获取指定文件夹下的文件列表 ...

  5. 仅需6道题轻松掌握Python时间和日期处理 | Python技能树征题

    仅需6道题轻松掌握Python时间和日期处理 | Python技能树征题 0. 前言 1. 第 1 题:时间单位转换 2. 第 2 题:日期与时间运算 3. 第 3 题:查找指定日期的后一个周日的日期 ...

  6. 仅需10道题轻松掌握Python字符串方法 | Python技能树征题

    仅需10道题轻松掌握Python字符串方法 | Python技能树征题 0. 前言 1. 第 1 题:字符串检查 2. 第 2 题:字符串大小写转换 3. 第 3 题:字符串开头或结尾匹配 4. 第 ...

  7. python 基础命令-Python 命令行(CLI)基础库

    在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...

  8. python命令行运行模式_[Python] 命令行模式阅读博客园的博文

    1 #-*- coding:UTF-8 -*- 2 importrequests3 from lxml importetree4 importsys5 importio6 importos7 8 9 ...

  9. python命令行传递参数

    python命令行参数传递 本文介绍python的两种参数传递方式,第1种为sys的参数传递,第2种为argparse的参数传递 1. 使用sys的sys.argv来获取命令行参数 import sy ...

最新文章

  1. ubuntu 18.04.4 - 显示文件路径
  2. linux按内容查找文件
  3. mybatis08--关联查询多对一
  4. MyBatis(4)动态SQL
  5. connectionString加密
  6. LeetCode 559N叉树的最大深度-简单
  7. 我是如何走上前端开发这条路 并常年保持一线竞争力的
  8. 服务器维修工单,运维工单--服务器申请工单
  9. Java 虚拟机学习笔记 | 类加载过程和对象的创建流程
  10. 6.2创建Docker镜像文件
  11. Windows 7各版本比较
  12. 进销存库存管理软件哪个好用
  13. 马哥python课堂笔记_马哥教育PYTHON相关基础 笔记
  14. R720重装系统\WEPE装系统\WEPE
  15. 7-3 皮球反弹高度 (10 分)
  16. android win7共享文件夹,手把手教你win7系统怎么共享文件夹
  17. python chr黑方格_Python中的chr()
  18. 为什么HDMI连接显示器无信号?
  19. 计算机组成原理——编译器、汇编器和链接器的基本概念
  20. VC++钩子使用之全局键盘钩子

热门文章

  1. 用Nginx搭建IIS集群实现负载均衡
  2. Linked List Two Finish
  3. 菜鸟学Struts2——Interceptors
  4. [转载] numpy.base_repr 方法解释
  5. 带新手玩转MVC——不讲道理就是干(下)
  6. [转帖] 资本的力量
  7. 二、将mysql用作一个简单的计算器
  8. RedHat命令笔记
  9. [转载]你呀,最大的问题就是太合群了
  10. 深入理解JVM之JVM内存区域与内存分配