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

Python新手用os.system获取网卡IP遇语法错误求助

解决:用os模块获取ens33网卡IP地址

1. 语法错误的原因

你写的代码里,awk命令的单引号'和外层包裹整个命令的单引号冲突了——Python会误以为字符串在awk的单引号位置就结束了,所以抛出语法错误。

2. 修正命令行并正确获取输出

首先要明确:os.system()只能返回命令的退出状态码(0代表成功,非0代表失败),拿不到命令的输出内容。要获取IP,得用os.popen()(属于os模块,符合你仅用os/sys的要求)。

这里给两种修正命令字符串的方式:

  • 方式一:转义awk里的单引号
import os

# 把awk部分的单引号用反斜杠转义,避免和外层单引号冲突
cmd = '/sbin/ifconfig ens33 | grep "inet" |awk \'/inet / { print $2 }\''
# 用os.popen读取命令输出,strip()去掉多余的换行和空格
ip_address = os.popen(cmd).read().strip()
print(ip_address)
  • 方式二:用双引号包裹整个命令,转义内部的双引号
import os

cmd = "/sbin/ifconfig ens33 | grep \"inet\" |awk '/inet / { print $2 }'"
ip_address = os.popen(cmd).read().strip()
print(ip_address)

3. 纯Python解析(不用shell管道)

如果不想依赖shell的管道命令,也可以直接读取ifconfig的全部输出,用Python字符串处理提取IP:

import os

# 获取ens33网卡的完整ifconfig输出
output = os.popen('/sbin/ifconfig ens33').read()
# 逐行筛选出包含inet且不是inet6的行
for line in output.split('\n'):
    if 'inet ' in line and 'inet6' not in line:
        # 分割行内容,提取第二个字段就是IP
        ip_address = line.strip().split()[1]
        print(ip_address)
        break

内容的提问来源于stack exchange,提问作者learnstuffnow49

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:45:46