python - 将 cmd 命令的过滤输出存储在变量中

标签 python variables cmd

我正在尝试将 cmd 命令的输出存储为 python 中的变量。 为实现这一点,我正在使用 os.system()os.system() 只是运行进程,它不捕获输出。

import os


PlatformName = os.system("adb shell getprop | grep -e 'bt.name'")
DeviceName = os.system("adb shell getprop | grep -e '.product.brand'")
DeviceID = os.system("adb shell getprop | grep -e 'serialno'")
Version = os.system("adb shell getprop | grep -e 'version.release'")

print(PlatformName)
print(DeviceName)
print(DeviceID)
print(Version)

然后我尝试使用 subprocess 模块。

import subprocess
import os


PlatformName = subprocess.check_output(["adb shell getprop | grep -e 'bt.name'"])
DeviceName = subprocess.check_output(["adb shell getprop | grep -e '.product.brand'"])
DeviceID = subprocess.check_output(["adb shell getprop | grep -e 'serialno'"])
Version = subprocess.check_output(["adb shell getprop | grep -e 'version.release'"])

print(PlatformName)
print(DeviceName)
print(DeviceID)
print(Version)

我收到以下错误

FileNotFoundError: [WinError 2] The system cannot find the file specified

如何将命令的输出存储为变量?

最佳答案

这里的问题:

  • 真的不推荐像这样传递参数(列表中的字符串,带空格)
  • 像这样传递参数需要 shell=True 才能有一点机会工作,而 shell=True 因安全问题(以及其他问题)而闻名,比如不可移植性)
  • grep 在 Windows 上不是标准的,模式是正则表达式,这意味着您可能必须转义 . ("bt\.name").
  • 当未找到时 grep 返回 1 并使 check_output 失败。
  • 当找到 grep 返回匹配项和一个换行符时,您必须去除这些内容

我会重写这个:

PlatformName = subprocess.check_output(["adb shell getprop | grep -e 'bt.name'"])

作为:

output = subprocess.check_output(["adb","shell","getprop"])
platform_name = next((line for line in output.decode().splitlines() if "bt.name" in line),"")

第二行是 grep 的“本地”版本(没有正则表达式)。它返回输出行中第一次出现的“bt.line”,如果未找到则返回空字符串。

你在这里不需要grep(上面不是严格等价的,因为它产生第一次出现,而不是所有出现但这对你的情况应该没问题)。您的客户端可能没有在 Windows 上安装 grep

关于python - 将 cmd 命令的过滤输出存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363569/

相关文章:

Python:如何确定正在使用的特定 Linux 发行版?

带有 if 语句的 Javascript 不改变 href 属性

Javascript 全局变量在mouseup 上始终未定义

Windows 10 控制台颜色不起作用(虚拟终端控制字符序列)

python - 如何使用信号处理?

python - 如何使用weakref或contextlib来关闭打开的文件?

php - 在 javascript 文件错误中使用 php var

cmd - 从命令行使用 graphviz nop

windows - 批处理 : How to echo string containing '&' char to a file

Python 3.4 多线程和传递变量