You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:54:51