Python与操作系统交互
Python执行命令行指令
执行命令行指令
首先导入subprocess模块,然后通过subprocess.run来执行命令行指令。
指令是在当前运行的脚本的工作目录下执行的
| 1 | result = subprocess.run(f'ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,text=True, encoding='utf-8') | 
函数的参数说明如下:
- args:这个参数可以是一个字符串,也可以是一个程序参数列表。如果是字符串,需要加上- shell=True参数,以便通过shell来解释这个命令。在这个例子中,- args是- f'ls',表示执行- ls命令。
- shell=True:这个参数指示- subprocess.run()使用shell来执行这个命令。
- stdout=subprocess.PIPE和- stderr=subprocess.PIPE:这两个参数表示子进程的标准输出和标准错误输出将被捕获,并通过- CompletedProcess对象的- stdout和- stderr属性提供。如果这两个参数没有被设置,子进程的标准输出和标准错误输出将直接显示在屏幕(Python控制台)上。
- text=True:这个参数表示在- stdout和- stderr中的输出将以文本形式返回,而不是字节形式。这个参数需要Python 3.7或更高版本支持。
- encoding='utf-8':这个参数指定了编码方式,用于将字节转换为文本。在这个例子中,使用的是UTF-8编码。
可以打印出标准输出和标准错误:
| 1 | print(result.stdout) | 
更改工作目录
因为subprogress.run是在当前工作目录下执行,所以需要切换工作目录,才能在指定的地方执行命令行指令。
在Python中,os.chdir() 函数用于改变当前工作目录到指定的路径。这个函数是os模块的一部分。另外可以用os.getcwd()来获取当前的工作目录。
| 1 | import os | 
Python与文件管理
构建完整路径
os.path.join(root, file),这个函数用于将两个或多个路径组件合并为一个完整的路径。它智能地处理目录分隔符(如UNIX系统中的/或Windows系统中的\),并确保路径的正确性。例如:
| 1 | import os | 
列出目录下的文件和子目录
os.listdir(path),这个函数用于列出指定路径下的所有文件和目录(子目录)的名称。它返回一个列表,包含path指定的目录中的所有文件和子目录的名称。例如:
| 1 | import os | 
检查给定路径是否是文件
os.path.isfile(path),这个函数用于检查给定的路径是否是一个文件。如果path是一个存在的文件,它返回True;如果path不存在或者是一个目录,它返回False。例如:
| 1 | import os | 
删除指定文件
os.remove(file_path),这个函数用于删除指定的文件。如果file_path是一个文件并且删除成功,函数不会有任何返回值。如果文件不存在或者由于某些原因(如权限问题)无法删除,会抛出一个OSError异常。例如:
| 1 | import os | 
删除给定文件夹
shutil.rmtree() 函数用于递归删除目录及其所有子目录和文件。shutil 是 Python 的一个模块,提供了许多文件操作的高级函数。
shutil.rmtree(path, ignore_errors=False, onerror=None) 函数的参数说明如下:
- path:这是一个字符串,表示要删除的目录的路径。
- ignore_errors:这是一个布尔值,默认为- False。如果设置为- True,则在删除过程中忽略发生的错误。
- onerror:这是一个函数,用于处理在删除过程中发生的错误。如果指定了这个参数,它应该是一个接受三个参数的函数:(errno, strerror, filename)。在这个函数中,你可以定义错误处理逻辑。
这是一个例子:
| 1 | import shutil | 
复制给定文件夹
shutil.copytree() 函数用于递归地复制一个目录树从一个位置到另一个位置。
shutil.copytree(src, dst) 中参数说明如下:
- src:这是一个字符串,表示源目录的路径,即要复制的目录。
- dst:这是一个字符串,表示目标目录的路径,即复制的目录将被放置的地方。如果目标目录已经存在,- shutil.copytree()将会抛出一个- FileExistsError异常。如果目标目录不存在,它将会被创建。- 1 
 2
 3
 4
 5
 6- import shutil 
 # 源目录和目标目录的路径
 source_item = '/path/to/source_directory'
 destination_item = '/path/to/destination_directory'
 # 递归复制目录树
 shutil.copytree(source_item, destination_item)
