"这篇文档是《Python Cookbook》第三版的一部分,涵盖了如何在Python中执行外部命令并获取输出,以及各种数据结构、字符串和文本处理、数字日期和时间相关的编程技巧。"
在Python中,当你需要执行一个外部命令并获取其输出时,可以使用`subprocess`模块中的`check_output()`函数。这个函数允许你执行指定的命令,并将结果以字节字符串的形式返回。例如,执行`netstat -a`这样的命令,你可以写:
```python
import subprocess
out_bytes = subprocess.check_output(['netstat', '-a'])
```
若要将字节字符串转换为文本字符串,你可以使用`decode()`方法:
```python
out_text = out_bytes.decode('utf-8')
```
如果执行的命令导致非零退出状态,`check_output()`会抛出`subprocess.CalledProcessError`异常。你可以捕获这个异常来处理错误并获取返回码:
```python
try:
out_bytes = subprocess.check_output(['cmd', 'arg1', 'arg2'])
except subprocess.CalledProcessError as e:
out_bytes = e.output # 错误发生前的输出
code = e.returncode # 返回码
```
默认情况下,`check_output()`只返回标准输出。如果想同时收集标准输出和错误输出,可以将`stderr`参数设置为`subprocess.STDOUT`:
```python
out_bytes = subprocess.check_output(['cmd', 'arg1', 'arg2'],
stderr=subprocess.STDOUT)
```
此外,你可以通过设置`timeout`参数来控制命令执行的超时时间,例如:
```python
try:
out_bytes = subprocess.check_output(['cmd', 'arg1', 'arg2'], timeout=5)
except subprocess.TimeoutExpired as e:
...
```
通常,无需使用底层shell环境执行命令,但如果你确实需要,可以设置`shell=True`。例如:
```python
out_bytes = subprocess.check_output("cmd arg1 arg2", shell=True)
```
文档中还涉及了Python数据结构和算法的相关技巧,例如解压序列赋值、优先级队列的实现、字典操作、序列处理、字符串和文本处理等。这些技巧包括但不限于:
1. 解压序列赋值给多个变量
2. 实现一个优先级队列
3. 字典排序和操作
4. 通过关键字排序字典列表
5. 正则表达式的使用,如Unicode匹配和字符串清理
6. 数字的四舍五入和浮点数精确运算
7. 复数的数学运算
8. 字节到大整数的打包和解包
这些技巧有助于提高Python代码的效率和可读性。通过掌握这些方法,开发者可以更好地处理日常编程中遇到的各种问题。