首页 > 编程问答 >subproces.Popen 带有或“|”符号不起作用

subproces.Popen 带有或“|”符号不起作用

时间:2024-08-01 06:49:25浏览次数:11  
标签:python subprocess popen

我试图仅列出我的 Wi-Fi 网络适配器的 IP 地址,以便能够检测它是否已连接并且附加了 IP 地址。

有了它本身,它就可以工作了...|| |输出:

from subprocess import Popen

Popen([
    'netsh',
    'interface',
    'ip',
    'show',
    'addresses',
    'Wi-Fi'
]).communicate()

但是,有了这个...

Configuration for interface "Wi-Fi"
    DHCP enabled:                         No
    IP Address:                           192.168.1.200
    Subnet Prefix:                        192.168.1.0/24 (mask 255.255.255.0)
    Default Gateway:                      192.168.1.1
    Gateway Metric:                       0
    InterfaceMetric:                      2

与列表中的或

from subprocess import Popen

Popen([
    'netsh',
    'interface',
    'ip',
    'show',
    'addresses',
    'Wi-Fi',
    '|',
    'findstr',
    '/ir',
    'IP Address'
]).communicate()

符号,它正在生成这个... | 表明我输入了错误的适配器名称。| ||我已经尝试了列表中

Usage: show addresses  [[name=]<string>]

Parameters:

       Tag         Value
       name      - The name or index of a specific interface.

Remarks: Displays the IP address configuration for an interface or
         interfaces.

The information displayed for this command consists of:

Field              Description
-----              -----------
DHCP enabled       Shows whether the address comes from static or DHCP
                   configuration.
IP Address         Shows the IP address configured for an interface.
Subnet Mask        Shows the subnet mask associated with the IP address.
Default Gateway    Shows the IP address of a default gateway for the interface.
Gateway Metric     Shows the metric for the default gateway shown above.
                   Only applies if multiple default gateways are configured.
Interface Metric   Shows the metric for an interface.
                   Only applies if multiple interfaces are configured.

Examples:

       show addresses "Wired Ethernet Connection"

参数的多种组合,但没有任何运气。

有人对此有任何见解吗? netsh 目前我最好的猜测是 Popen 不知道如何处理 or

符号。

My best guess at the moment is that Popen doesn't know how to process the or | symbol.


问题在于正试图在单个 Popen 调用中使用管道字符 ( | ) 将一个命令的输出传递到另一个命令。在 Python 中, | 运算符用于按位或操作,而不是用于 shell 管道。

要在 Python 中使用管道,需要创建 两个 Popen 对象,并将第一个对象的标准输出连接到第二个对象的标准输入。

以下代码展示了如何实现这一点:

from subprocess import Popen, PIPE

p1 = Popen([
    'netsh',
    'interface',
    'ip',
    'show',
    'addresses',
    'Wi-Fi'
], stdout=PIPE)

p2 = Popen([
    'findstr',
    '/ir',
    'IP Address'
], stdin=p1.stdout, stdout=PIPE)

p1.stdout.close()  # 不再需要 p1 的 stdout

output = p2.communicate()[0]

print(output.decode())

代码解释:

  1. 创建两个 Popen 对象:
  2. p1 :运行 netsh 命令,并将 stdout 设置为 PIPE ,表示将其输出捕获到管道中。
  3. p2 :运行 findstr 命令,并将 stdin 设置为 p1.stdout ,表示从 p1 的输出中读取数据,并将 stdout 设置为 PIPE ,表示将其输出捕获到管道中。

  4. 关闭 p1 的 stdout:

  5. p1.stdout.close() :关闭 p1 的标准输出,告诉 p2 数据已发送完毕。

  6. 读取 p2 的输出:

  7. output = p2.communicate()[0] :从 p2 的标准输出中读取数据。

  8. 打印输出:

  9. print(output.decode()) :将输出解码为字符串并打印。

此代码将运行 netsh 命令,使用 findstr 命令过滤其输出,并打印包含 "IP Address" 的行。

标签:python,subprocess,popen
From: 78818501

相关文章

  • 将 HTTP 分块编码数据流代码片段从 Node.js 转换为 Python
    我有一个Node.js客户端代码,它将请求发送到HTTP服务器,然后连续接收分块编码数据。这是带有一些流量数据输出的Node.js代码。consthttp=require('http');constoptions={hostname:'...',path:'...',port:...,...};constreq=http.request(......
  • GitHub Actions 工作流程中的 moviepy 安装错误:subprocess-exited-with-error
    我尝试在GitHubActions工作流程中安装moviepy时遇到错误。在我的本地机器上安装工作正常,但在CI环境中有时会失败。该错误消息表明获取构建轮子的要求未成功运行,退出代码为1。它还提到该错误源自子进程,并且可能不是pip的问题。Downloadingmoviepy-1.0.3.tar.gz(388......
  • vsc python 调试器和 pylance 无法识别已安装的包
    我最近使用snowflake-connector-python在我的虚拟环境中安装了pipinstallsnowflake-connector-python[pandas]==2.7.6,当我在激活虚拟环境的情况下从命令行运行我的脚本时,它工作正常。我设置了与VSC解释器相同的虚拟环境,但尝试运行python调试器会引发异常......
  • 如何从python读取matlab持续时间对象
    我创建一个matlab持续时间对象并将其保存到.mat文件:timeend=seconds(123);save('time.mat',timeend,'-v7.3');然后我从python读取它:withh5py.File('time.mat','r')asf:var=f['timeend'][:]print(list(var))......
  • 通过 python 连接到 Snowflake 时出错“UnpicklingError: invalid load key, '\x00'
    我在使用snowflake.connector.connect通过python连接到snowflake时遇到以下错误importsnowflake.connector#pipinstallsnowflake-connector-python#iamgettingtheenvfrom.envfileistoredlocallycnx=snowflake.connector.connect(user=os.getenv('USER'),pass......
  • Python Selenium 单击 webdriverwait 与 find_element
    我无法理解这两个代码块之间的区别。发送点击在webdriverwait和find_elements中都有效。代码1fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.suppo......
  • Python 问题 如何创建在 PDF 中注册为剪切线的专色?
    我正在开发一个项目,需要我在图像周围创建一条剪切线,但在任何RIP程序(例如Versaworks或Flexi)上将其注册为实际剪切线时遇到困难。我尝试了很多不同的方法python库可以帮助解决这个问题,但我无法让它工作。我希望它像我们在Illustrator中所做的那样,创建一条名为CutConto......
  • 使用Python时如何避免`setattr`(和`getattr`)?以及是否有必要避免
    如果我想向协议缓冲区中的字段添加一个在编译时未知的值,我目前正在做setattr我通常不喜欢使用setattr,因为它看起来不太安全。但是当我知道该对象是protobuf时,我认为这很好,因为我设置它的值必须是protobuf允许的类型。所以也许它并不是真的不安全?让我举......
  • Java sshtools 生成的 EDDSA 签名与 Python 的 pycryptome 生成的签名不匹配
    我有一个python库,它使用pycryptodomelibrary使用openssh格式的ED25519私钥使用Ed25519算法对数据进行签名。然后需要使用sshtools库和相应的公钥在Java应用程序中验证签名。但是签名验证失败。约束:从文件中读取私钥/公钥很重要。我无法......
  • Elastic python请求超时错误:池达到最大大小,不允许更多连接
    我正在使用Elasticsearchpython模块。我正在尝试像这样建立到服务器的连接es=Elasticsearch([config.endpoint],api_key=config.key,request_timeout=config.request_timeout)服务器连接,然后我尝试执行丰富策略。es.enr......