问题

我用subprocess 执行命令查 主机Ip 报错

​ command = """ "grep {0} /etc/hosts | awk '{print $1}' " """.format(socket.gethostname()) KeyError: 'print $1'

使用python 的subprocess 执行shell命令更具 主机名查询hosts文件中的ip

您可以使用 Python 库 subprocess 中的函数 run() 来执行 shell 命令,并将结果作为字符串返回。

Copy codeimport socket
import subprocess hostname = socket.gethostname()
command = "grep {0} /etc/hosts | awk '{{print $1}}'".format(hostname) result = subprocess.run(command, shell=True, stdout=subprocess.PIPE)
ip = result.stdout.decode('utf-8').strip()
print(ip)

或者也可以使用subprocess.check_output

Copy codeimport socket
import subprocess hostname = socket.gethostname()
command = "grep {0} /etc/hosts | awk '{{print $1}}'".format(hostname) ip = subprocess.check_output(command, shell=True).decode('utf-8').strip()
print(ip)

这两种方式都是可以的,但是建议使用subprocess.run()

这段代码会构造一个命令,执行grep hostname /etc/hosts ,输出的第一个字段为 IP,然后使用subprocess执行命令,将stdout设置为subprocess.PIPE,结果会以字节形式返回,用.decode('utf-8').strip()转为string 并且去除首尾空格

值得注意的是,subprocess.Popen,subprocess.run都会接受shell=True 参数,但是建议使用subprocess.run 他是在后面版本推出的。

注意

在上面的 shell 命令中, {{ 和 }} 是花括号。在 Python 字符串中使用单个花括号 { 和 } 来表示字符串格式化,而在 shell 中,花括号被用来表示命令的嵌套。

为了在 Python 字符串中插入本应在 shell 中使用的花括号,就需要转义。在 Python 中,使用两个花括号 {{ 和 }} 来表示一个单独的花括号。

在这个例子中, {print $1} 表示 awk 命令的一部分,而不是 Python 字符串格式化的部分。使用 {{ 和 }} 来转义花括号可以保证命令在执行时得到正确的解释。

它同时保证了 python 的字符串格式化以及shell命令的正确性。

Python之subprocess 执行报错的更多相关文章

  1. python setup.py install 报错:error: [WinError 3] 系统找不到指定的路径。: 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\PlatformSDK\\lib

    Outline 在通过 setup.py 安装python模块时,遇到了以下报错: # 执行 python setup.py install # 报错: error: [WinError 3] 系统找 ...

  2. ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2

    ubuntu上跑python连接pg,报错  ImportError: No module named psycopg2 root@pgproxy1:~# python /home/zxw/PGWri ...

  3. 安装监控MongoDB的Python安装包时候报错:HTTP Error 403: SSL is required

    安装pymongo-2.3.tar.gz,执行命令python setup.py install报错: HTTP Error 403: SSL is required 分析原因:安装需要下载这个dis ...

  4. Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED

    Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...

  5. oracle创建包后执行报错:object omgmig.test_package is invalid.

    今天学习了一下oracle的包的写法,然后碰到这么个问题.包声明和包主体都正确,但是就是执行报错:object omgmig.test_package is invalid. 这是会报错的sql,看起 ...

  6. salt执行报错一例

    执行报错: 查看服务端日志: 认证有问题 重新认证吧!!! minion端: [root@super66 ~]# cd /etc/salt/[root@super66 salt]# lsminion ...

  7. python 读取配置文件总是报错 configparser.NoSectionError: No section:

    本文为作者原创,禁止转载,违者必究法律责任!!! python 读取配置文件总是报错 configparser.NoSectionError: No section: 无论是 python2的版本,还 ...

  8. Python djangorestframework安装库报错SSL: CERTIFICATE_VERIFY_FAILED

    Python djangorestframework 安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip inst ...

  9. Ubuntu下sh *.sh使用==操作符执行报错

    ----<鸟哥的Linux私房菜--基础篇>学习笔记 ubuntu默认的sh是连接到dash,而我们写shell脚本时使用的时bash.bash和dash在一些方面是不兼容的.因此执行同一 ...

  10. windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决

    windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决 一.发现问题 由于tomcat内存溢出,在wind ...

随机推荐

  1. win7安装snmp服务

    一.安装SNMP Win7操作系统默认情况下是不安装SNMP服务的,今天讲解一下在Win7操作系统下安装SNMP,具体安装步骤如下: 打开控制面板--卸载程序 WIN7操作系统下安装SNMP的步骤如下 ...

  2. Kubernetes 初体验

    在 DigitalOcean 创建一个 Kubernetes 集群 下载集群 Config 文件到 ~/.kube 目录 通过环境变量 KUBECONFIG 设置本地 kubectl 工具使用下载的配 ...

  3. C++: 智能指针的自定义删除器 `Custom Deleter` 有什么用?

    C++11智能指针std::shared_ptr和std::unique_ptr都支持自定义删除器,本文将介绍自定义删除器的使用场景和使用方法.智能指针模板参数的第二个类型是删除器,一般是一个函数指针 ...

  4. C++ STL vector 性能之push_back、emplace_back、reserve

    #include <iostream> #include <vector> #include <chrono> using namespace std; const ...

  5. Azure 入门系列 (第五篇 Azure Storage)

    本系列 这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能. 一共 6 篇 1. Virtual Machine (VM) ...

  6. bfs 与优先队列————洛谷p1126(历经两个小时总算AC了,哭晕)

    机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径 \(1.6\) 米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个 \(N\tim ...

  7. 在Windows平台使用源码编译和安装PyTorch3D指定版本

    最近在部署 SyncTalk 虚拟数字人项目时,需要安装很多依赖项,在执行到pip install --no-index --no-cache-dir pytorch3d -f https://dl. ...

  8. NET Core 基础 - 删除字符串最后一个字符的七大类N种实现方式

    今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点. 01.第一类.字符串方式 这类方法是通过string类型自身方法直接实现. 1.Substring方法 相信大多数 ...

  9. 5.6 函数y=Asin(ωx+φ)的图像和性质

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [基础过关系列]2022-2023学年高一数学上学期同步知识点剖析精品讲义(人教A版2019) \({\color{Red}{ 跟贵哥 ...

  10. .Net 理解异步的学习

    // 异步 - 在方法中使用 // 异步约等于线程 async await 一起使用 // 异步只有三种返回值 // 1. Task // 2. Task<T> // 3. void 几乎 ...