如何通过Python执行Shell命令实现Linux下目录创建与文件拷贝操作
Linux环境下通过Python完成指定系统目录、文件操作的实现方法
核心需求说明
- 目标场景为Linux系统,替代Windows下通过CMD完成的同类操作,通过Python调用系统能力完成指定操作
- 操作前置要求:通过
su root获取root权限,保障系统目录操作的权限合规 - 操作明细:
- 在
/var目录下创建名为hi的文件夹 - 将
/var/test路径下的myphone.txt文件复制至/etc/test目录 - 校验
/root/test路径下是否存在myphone.txt文件,若存在则将其复制到/lib64/telphone目录
- 在
实现注意点
- 上述操作涉及系统级目录的写入修改,普通用户权限无法完成,需确保执行Python脚本的进程具备root权限
- 直接在脚本中调用
su root会触发交互式密码输入,无法在非交互式脚本流程中正常完成,需提前为执行用户配置sudo免密权限,脚本内自动完成提权
具体实现代码
import os import subprocess # 校验当前进程权限,非root则自动通过sudo提权重跑 if os.geteuid() != 0: exit(subprocess.call(['sudo', 'python3', __file__])) # 1. 创建/var/hi目录,目录已存在则不报错 os.makedirs('/var/hi', exist_ok=True) # 2. 复制/var/test/myphone.txt到/etc/test目录 os.makedirs('/etc/test', exist_ok=True) source1 = '/var/test/myphone.txt' if os.path.exists(source1): subprocess.run(['cp', source1, '/etc/test/'], check=True) # 3. 按条件复制/root/test/myphone.txt到目标目录 os.makedirs('/lib64/telphone', exist_ok=True) source2 = '/root/test/myphone.txt' if os.path.exists(source2): subprocess.run(['cp', source2, '/lib64/telphone/'], check=True)
补充说明
代码中未采用拼接Shell字符串执行的方式,而是通过传入独立参数调用系统命令、结合os模块完成路径判断与目录创建,可有效规避命令注入风险;代码中
exist_ok=True参数可避免目录已存在时抛出异常,check=True参数可在命令执行失败时主动抛出报错,方便定位问题。
内容的提问来源于stack exchange,提问作者henrry
相关产品推荐
相关产品推荐

