僅需5道題輕松掌握Python命令列相關標準庫 | Python技能樹征題
- 0. 前言
- 1. 第 1 題:命令列日志記錄
- 2. 第 2 題:將日志存盤在磁盤上
- 3. 第 3 題:命令列引數決議
- 4. 第 4 題:運行系統命令
- 5. 第 5 題:命令列中進度條顯示
- 試題代碼地址
0. 前言
許多用戶習慣于使用命令列工具與系統進行互動,因此 Python 中的提供了相應的標準庫,用于向通過 shell 和文本與用戶進行互動的軟體提供常見方法和函式,我們就通過 5 道 Python 編程題來掌握 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) * weight
log.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) * weight
log.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) * weight
log.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) * weight
log.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, 1
for n in range(n):
a, b = b, a+b
print(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, 1
for n in range(n):
a, b = b, a+b
print(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, 1
for n in range(n):
a, b = b, a+b
print(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, 1
for n in range(n):
a, b = b, a+b
print(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, result
except 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, result
except 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.value
else:
message = '[%s] {}%%'.format(progress)
bar_width = max_width - len(message) + 3
filled = int(round(bar_width / 100.0 * progress))
spaceleft = bar_width - filled
bar = '=' * filled + ' ' * spaceleft
sys.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 i
return 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.value
else:
message = '[%s] {}%%'.format(progress)
bar_width = max_width - len(message) + 3
filled = int(round(bar_width / 100.0 * progress))
spaceleft = bar_width - filled
bar = '=' * filled + ' ' * spaceleft
sys.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.value
else:
message = '[%s] {}%%'.format(progress)
bar_width = max_width - len(message) + 3
filled = int(round(bar_width / 100.0 * progress))
spaceleft = bar_width - filled
bar = '=' * filled + ' ' * spaceleft
sys.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 i
return 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.value
else:
message = '[%s] {}%%'.format(progress)
bar_width = max_width - len(message) + 3
filled = int(round(bar_width / 100.0 * progress))
spaceleft = bar_width - filled
bar = '=' * filled + ' ' * spaceleft
sys.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 i
return time.time() - start
if __name__ == '__main__':
print("Waiting", wait(4))
正確答案:C
試題代碼地址
https://codechina.csdn.net/LOVEmy134611/python_problem
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323040.html
標籤:其他
上一篇:2021-10-18
