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来解释这个命令。在这个例子中,argsf'ls',表示执行ls命令。
  • shell=True:这个参数指示subprocess.run()使用shell来执行这个命令。
  • stdout=subprocess.PIPEstderr=subprocess.PIPE:这两个参数表示子进程的标准输出和标准错误输出将被捕获,并通过CompletedProcess对象的stdoutstderr属性提供。如果这两个参数没有被设置,子进程的标准输出和标准错误输出将直接显示在屏幕(Python控制台)上。
  • text=True:这个参数表示在stdoutstderr中的输出将以文本形式返回,而不是字节形式。这个参数需要Python 3.7或更高版本支持。
  • encoding='utf-8':这个参数指定了编码方式,用于将字节转换为文本。在这个例子中,使用的是UTF-8编码。

可以打印出标准输出和标准错误:

1
2
print(result.stdout)
print(result.stderr)

更改工作目录

因为subprogress.run是在当前工作目录下执行,所以需要切换工作目录,才能在指定的地方执行命令行指令。

在Python中,os.chdir() 函数用于改变当前工作目录到指定的路径。这个函数是os模块的一部分。另外可以用os.getcwd()来获取当前的工作目录。

1
2
3
4
5
6
7
8
9
10
11
12
import os

# 获取当前工作目录
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

# 改变工作目录到 '/path/to/another/directory'
os.chdir('/path/to/another/directory')

# 再次获取当前工作目录
current_directory = os.getcwd()
print("改变后的工作目录:", current_directory)

Python与文件管理

构建完整路径

os.path.join(root, file),这个函数用于将两个或多个路径组件合并为一个完整的路径。它智能地处理目录分隔符(如UNIX系统中的/或Windows系统中的\),并确保路径的正确性。例如:

1
2
3
4
import os
root = '/path/to/directory'
file = 'example.txt'
full_path = os.path.join(root, file)

列出目录下的文件和子目录

os.listdir(path),这个函数用于列出指定路径下的所有文件和目录(子目录)的名称。它返回一个列表,包含path指定的目录中的所有文件和子目录的名称。例如:

1
2
3
import os
new_articles_dir = '/path/to/directory'
files_and_dirs = os.listdir(new_articles_dir)

检查给定路径是否是文件

os.path.isfile(path),这个函数用于检查给定的路径是否是一个文件。如果path是一个存在的文件,它返回True;如果path不存在或者是一个目录,它返回False。例如:

1
2
3
4
5
6
import os
path = '/path/to/file.txt'
if os.path.isfile(path):
print(f"{path} 是一个文件")
else:
print(f"{path} 不是一个文件")

删除指定文件

os.remove(file_path),这个函数用于删除指定的文件。如果file_path是一个文件并且删除成功,函数不会有任何返回值。如果文件不存在或者由于某些原因(如权限问题)无法删除,会抛出一个OSError异常。例如:

1
2
3
import os
file_path = '/path/to/file.txt'
os.remove(file_path)

删除给定文件夹

shutil.rmtree() 函数用于递归删除目录及其所有子目录和文件shutil 是 Python 的一个模块,提供了许多文件操作的高级函数。

shutil.rmtree(path, ignore_errors=False, onerror=None) 函数的参数说明如下:

  • path:这是一个字符串,表示要删除的目录的路径。
  • ignore_errors:这是一个布尔值,默认为False。如果设置为True,则在删除过程中忽略发生的错误。
  • onerror:这是一个函数,用于处理在删除过程中发生的错误。如果指定了这个参数,它应该是一个接受三个参数的函数:(errno, strerror, filename)。在这个函数中,你可以定义错误处理逻辑。

这是一个例子:

1
2
3
4
5
6
7
import shutil

# 要删除的目录路径
dir_path = '/path/to/directory'

# 递归删除目录及其所有子目录和文件
shutil.rmtree(dir_path)

复制给定文件夹

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)