如何在Python中使用subprocess运行指定的Bash Shell命令?
用subprocess.run执行目标Bash命令的两种实现方式
方式一:直接调用Shell执行完整命令
把原Bash命令打包成字符串,通过shell=True让subprocess调用系统Shell执行,适合快速迁移原有逻辑:
import subprocess cmd = ''' IFS=$'\\n' for i in $(grep ^id= /etc/NetworkManager/system-connections/*.nmconnection | cut -d= -f2); do \ nmcli connection modify "$i" ipv4.dhcp-send-hostname no ipv6.dhcp-send-hostname no; \ done ''' # 执行命令,check=True会在命令失败时抛出异常,executable指定用bash解析语法 subprocess.run(cmd, shell=True, check=True, executable='/bin/bash')
方式二:用Python原生逻辑实现(更安全)
避免依赖Shell,用Python直接处理文件读取和遍历,逐个调用nmcli命令,消除Shell注入风险:
import subprocess import glob # 遍历所有NetworkManager连接配置文件 for conn_path in glob.glob('/etc/NetworkManager/system-connections/*.nmconnection'): with open(conn_path, 'r') as f: for line in f: stripped_line = line.strip() # 匹配id=开头的行 if stripped_line.startswith('id='): conn_id = stripped_line.split('=', 1)[1] # 执行修改命令 subprocess.run([ 'nmcli', 'connection', 'modify', conn_id, 'ipv4.dhcp-send-hostname', 'no', 'ipv6.dhcp-send-hostname', 'no' ], check=True) break # 每个配置文件只取第一个id字段
内容的提问来源于stack exchange,提问作者user21379959
相关产品推荐
相关产品推荐

