当前位置: 首页 > 知识库问答 >
问题:

如何从子流程中检索有用的结果?[副本]

公冶嘉
2023-03-14
b'10.0.3.15'
'10.0.3.15'

python字符串前面的b前缀是什么意思?解释'b'的意思,但不回答这个问题。

当然,这个问题的有效答案将被表决为已解决。

从shell可以使用复杂语句查找我的IP地址:

ip addr show eth0 | awk '$1 == "inet" {gsub(/\/.*$/, "", $2); print $2}'

现在我希望这个语句,或者任何语句,在Python中执行。因为该语句具有各种特定的标记,所以我只需写入文件,并将文件读入变量cmd

我检查了cmd的内容与上面的语句完全相同。现在我用Python执行这个命令:

p = subprocess.Popen(cmd, shell=True,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)
b = p.communicate()  

结果是一个元组,我只需要内容:

value = b[0]

在格式规范迷你语言中,我看到'b'是一种表示二进制的类型。

我只需要“10.0.3.15”。如何实现?

共有1个答案

龚玄天
2023-03-14

使用out,_=p.communication()。则输出将作为字符串保存在变量out中。删除\n。您可以使用strip()(例如out.strip())。

import subprocess

device = 'em1'
cmd = "ip addr show %s | awk '$1 == \"inet\" {gsub(/\/.*$/, \"\", $2); print $2}'" % device

p = subprocess.Popen(cmd, shell=True,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)
out, _ = p.communicate()
print(out.strip())

但是您应该看看Python模块netifaces。

import netifaces
device = 'em1'
print(netifaces.ifaddresses(device)[netifaces.AF_INET])

这将输出如下所示的内容:

[{'broadcast': '192.168.23.255', 'netmask': '255.255.255.0', 'addr': '192.168.23.110'}]
 类似资料:
  • 问题内容: 我有一列datetime类型,我只想从中检索日期。反正有这样做吗? 以前它是一个纪元值,我将其转换为datetime。 这是一个示例结果: 我尝试了以下命令,但结果为负/零 问题答案: 您可以使用DATE函数。 例子 您只能通过strftime获得一天,

  • 问题内容: 我 没有 使用或没有任何依赖关系,我现在已经完全将其设为本机,但是在此行尝试传递额外内容时遇到了问题: mRootDatabase = getAdapter(mContext).getItem(position); 必需的数据库参考,找到了UserPojo 在你可以使用在为了做到这一点快,但即时知道如何处理同没有它,因为我的应用程序不会有实现的任何FirebaseAdapters,我不

  • 直接从HDFS读取文件,而不将其复制到本地文件系统。不过,我将结果复制到本地文件系统。 hduser@ubuntu:/usr/local/hadoop$mkdir/tmp/gutenberg-output bin/hadoop dfs-getmerge/user/hduser/gutenberg-output/tmp/gutenberg-output deprecated:不推荐使用此脚本执行hd

  • 问题内容: 我有以下代码,用于使用JSoup在Java中解析HTML。 问题是我只能检索首页搜索结果链接。我应该怎么做才能从Google搜索结果的其余页面获得链接。 问题答案: 如果要从第二页获得结果,请添加到URL。对于第三页使用,依此类推。

  • 我想通过调用来映射列表中的每个条目,它返回多个条目,然后将结果作为列表收集。 如果没有溪流,我会这样做: 我如何用流来完成这件事呢?这将给出一个编译错误:

  • 我正在创建一个社交应用,当有人上传帖子时,他们上传帖子的时间也会被上传。 我想得到上传的日期和时间,并以适当的形式向用户展示。例如,如果它是在2小时前上传的,它会显示2小时,而不是上传的整个日期和时间或上传日期的时间戳。那么我该如何展示它,哪一个最简单? 此代码: 我得到了这个错误: java.lang.NullPointerExctive:尝试调用虚方法java.lang.Stringcom.e