[ ]
周飒博客-ZhouSa.com 1. 调用子进程
python经常用于写脚本,写脚本就离不开调用外部程序,这个被称作子进程调用,python原生支持我们可以使用标准库subprocess,如果我们需要异步的使用子进程,还可以使用asyncio.create_subprocess_shell
1.1. 使用subprocess
我们调用接口subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
来执行子进程的调用,通常我们会比较关注下面几个参数:
args
要执行的命令行命令,最好使用字符串,也支持字符串组成的序列,capture_output
标明是否要捕获子进程的输出timeout
表示如果子进程多久没有执行完成会被杀死check
表示当子进程报错时这个run函数的执行也会报CalledProcessError
shell
指定是否使用shell执行程序cwd
指定工作的路径,如果是None则在执行脚本所在路径上执行env
参数的值只能是字典或者None,用于设定执行时用的环境变量input
用于传入执行时的输入,如果有text
参数或者使用encoding
指定了字符串编码,则传入的是字符串,否则传入的只能是字节串
import subprocess
cp = subprocess.run("ls -la",capture_output=True, shell=True, check=True)
cp.returncode
0
print(cp.stdout.decode("utf-8"))
total 88 drwxr-xr-x 14 huangsizhe staff 448 6 22 16:12 . drwxr-xr-x 17 huangsizhe staff 544 6 6 10:39 .. -rw-r--r--@ 1 huangsizhe staff 6148 5 15 20:18 .DS_Store drwxr-xr-x 14 huangsizhe staff 448 6 21 23:49 .git -rw-r--r-- 1 huangsizhe staff 1203 4 9 00:57 .gitignore drwxr-xr-x 5 huangsizhe staff 160 6 22 15:58 .ipynb_checkpoints -rw-r--r-- 1 huangsizhe staff 1074 4 9 00:57 LICENSE -rw-r--r-- 1 huangsizhe staff 494 5 15 18:50 README.md drwxr-xr-x 2 huangsizhe staff 64 4 9 01:40 img drwxr-xr-x 11 huangsizhe staff 352 4 9 00:57 国际化 -rw-r--r-- 1 huangsizhe staff 6745 6 22 15:57 定时任务.ipynb -rw-r--r-- 1 huangsizhe staff 2643 6 22 16:12 调用子进程.ipynb -rw-r--r-- 1 huangsizhe staff 11066 6 21 23:46 结构数据验证.ipynb drwxr-xr-x 9 huangsizhe staff 288 4 9 00:57 数据压缩与归档
1.2. 使用asyncio来执行子进程
和subprocess
类似,asyncio有一个异步实现的subprocess
import asyncio cmd = "ls -la" proc = await asyncio.create_subprocess_shell( cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE ) stdout, stderr = await proc.communicate() print(f'[{cmd!r} exited with {proc.returncode}]') if stdout: print(f'[stdout]\n{stdout.decode()}') if stderr: print(f'[stderr]\n{stderr.decode()}')
['ls -la' exited with 0] [stdout] total 96 drwxr-xr-x 14 huangsizhe staff 448 6 22 16:30 . drwxr-xr-x 17 huangsizhe staff 544 6 6 10:39 .. -rw-r--r--@ 1 huangsizhe staff 6148 5 15 20:18 .DS_Store drwxr-xr-x 14 huangsizhe staff 448 6 21 23:49 .git -rw-r--r-- 1 huangsizhe staff 1203 4 9 00:57 .gitignore drwxr-xr-x 5 huangsizhe staff 160 6 22 15:58 .ipynb_checkpoints -rw-r--r-- 1 huangsizhe staff 1074 4 9 00:57 LICENSE -rw-r--r-- 1 huangsizhe staff 494 5 15 18:50 README.md drwxr-xr-x 2 huangsizhe staff 64 4 9 01:40 img drwxr-xr-x 11 huangsizhe staff 352 4 9 00:57 国际化 -rw-r--r-- 1 huangsizhe staff 6745 6 22 15:57 定时任务.ipynb -rw-r--r-- 1 huangsizhe staff 5042 6 22 16:30 调用子进程.ipynb -rw-r--r-- 1 huangsizhe staff 11066 6 21 23:46 结构数据验证.ipynb drwxr-xr-x 9 huangsizhe staff 288 4 9 00:57 数据压缩与归档
还没有评论,来说两句吧...