Python之subprocess 执行报错
问题
我用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 执行报错的更多相关文章
- 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] 系统找 ...
- ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2
ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2 root@pgproxy1:~# python /home/zxw/PGWri ...
- 安装监控MongoDB的Python安装包时候报错:HTTP Error 403: SSL is required
安装pymongo-2.3.tar.gz,执行命令python setup.py install报错: HTTP Error 403: SSL is required 分析原因:安装需要下载这个dis ...
- Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED
Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...
- oracle创建包后执行报错:object omgmig.test_package is invalid.
今天学习了一下oracle的包的写法,然后碰到这么个问题.包声明和包主体都正确,但是就是执行报错:object omgmig.test_package is invalid. 这是会报错的sql,看起 ...
- salt执行报错一例
执行报错: 查看服务端日志: 认证有问题 重新认证吧!!! minion端: [root@super66 ~]# cd /etc/salt/[root@super66 salt]# lsminion ...
- python 读取配置文件总是报错 configparser.NoSectionError: No section:
本文为作者原创,禁止转载,违者必究法律责任!!! python 读取配置文件总是报错 configparser.NoSectionError: No section: 无论是 python2的版本,还 ...
- Python djangorestframework安装库报错SSL: CERTIFICATE_VERIFY_FAILED
Python djangorestframework 安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip inst ...
- Ubuntu下sh *.sh使用==操作符执行报错
----<鸟哥的Linux私房菜--基础篇>学习笔记 ubuntu默认的sh是连接到dash,而我们写shell脚本时使用的时bash.bash和dash在一些方面是不兼容的.因此执行同一 ...
- 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 ...
随机推荐
- AI的那些名词
AI 是什么? Artificial Intelligence,即人工智能,1956年于Dartmouth学会上提出,一种旨在以类似人类反应的方式对刺激做出反应并从中学习的技术,其理解和判断水平通常只 ...
- C# 导出datatable数据到excel
第一步:下载两个需要的NUGET包 1.org.in2bits.MyXls:2.NPOI 第二步:关键类OutExcel. using System; using System.Linq; using ...
- ZeroTier 内网穿透
之前使用 FRP 进行内网穿透,缺点是需要公网 IP,而没有公网 IP 的我只好租了一台云服务器来作为 FRP Server.花钱不说,公网这台云服务器的带宽还很小,导致内网穿透体验并不怎么样.Zer ...
- 深度学习Python代码小知识点(备忘,因为没有脑子)
现在是2024年4月24日16:58,今天摸鱼有点多,备忘一下,都写到一篇内容里面,免得分散. 1. np.concatenate()函数'np.concatenate'是NumPy库中用来合并两个或 ...
- SQL Server – Concurrency 并发控制
前言 以前写过相关的, 但这篇主要讲一下概念. 帮助理解 Entity Framework with MySQL 学习笔记一(乐观并发) Asp.net core 学习笔记 ( ef core tra ...
- HarmonyOS ArkTS基础语法
前提:安装开发工具 教程:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0 ...
- 图解YUV420、YUV420(YUY2)、YUV422(YVYU)
Y:亮度分量 UV:色度分量 1. 标准yuv指的是yuv420 一般看文章,会出现下面的公式,但不涉及具体的yuv格式,其实这一定指的是yuv420 Y与RGB的演算关系为:Y = 0.21 ...
- 《HelloGitHub》第 102 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...
- 深入理解 Nuxt.js 中的 app:error:cleared 钩子
title: 深入理解 Nuxt.js 中的 app:error:cleared 钩子 date: 2024/9/28 updated: 2024/9/28 author: cmdragon exce ...
- 图片 电力电网行业IT运维方案
智能电网背景下,电力.电网企业信息化逐渐渗透到其业务链的各个环节,云计算.物联网.移动互联网等新技术的应用,更驱动信息化与业务创新深度融合.电力.电网企业集团信息系统群逐渐朝着一体化方向发展,信息链越 ...