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 ...
随机推荐
- ubuntu中sshd_config配置文件不存在
sshd_config配置文件不存在 导致外部无法连接ssh 解决方案: 1.完全卸载 sudo apt-get remove openssh-server openssh-client --purg ...
- git 修改提交作者及提交日期
进入交互式 rebase 模式 git rebase -i <commit> 你要修改哪次提交的日期,就 rebase 到该提交的上一次提交. git 提示你新的分支要包含哪些提交,默认已 ...
- LaTeX 插入表格
普通表格 \begin{table}[h] % h: here \begin{center} % 一个字母代表一列 \begin{tabular}{|c|cccc|} % c: center, l: ...
- DRBD - Distributed Replication Block Device
Ref https://computingforgeeks.com/install-and-configure-drbd-on-centos-rhel https://www.veritas.com/ ...
- python学习教材选哪个
python语言俨然成为当今最流行的国际语言,无论你是做AI的还是非AI,大家都在用python语言,各种平台也都开始支持python,现在连文科生都在学习python语言了,甚至很多表哥表姐的工作都 ...
- Angular 18+ 高级教程 – 初识 Angular
Before Starting 深入学习 Angular 是一件非常耗时耗力的事情. 实施 Angular 到项目中同样也是一件非常耗时耗力的事情. 在我们做出这么大的投入之前,我们有必要先思考以下几 ...
- JavaScript Library – Swiper
前言 官网已经有很好的教程了, 这篇只是记入一些我用过的东西和冷门知识. 参考 官网安装 官网 Demo 安装 yarn add swiper JS import Swiper from 'swipe ...
- 手撸MQ消息队列——循环数组
队列是咱们开发中经常使用到的一种数据结构,它与栈的结构类似.然而栈是后进先出,而队列是先进先出,说的专业一点就是FIFO.在生活中到处都可以找到队列的,最常见的就是排队,吃饭排队,上地铁排队,其他就不 ...
- QT硬件异构计算
QT硬件异构计算 使用AI技术辅助生成 1 QT硬件异构计算概述 1.1 硬件异构计算概念 1.1.1 硬件异构计算概念 硬件异构计算概念 <QT硬件异构计算>正文 硬件异构计算概念 在进 ...
- dfs 油滴拓展——洛谷p1378
油滴扩展 题目描述 在一个长方形框子里,最多有 \(N\) 个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一 ...