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
6import shutil
# 源目录和目标目录的路径
source_item = '/path/to/source_directory'
destination_item = '/path/to/destination_directory'
# 递归复制目录树
shutil.copytree(source_item, destination_item)