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

Woj*_*k T 7 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)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用该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)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

FileNotFoundError:[WinError 2]系统找不到指定的文件

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

Jea*_*bre 7

这里的问题:

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

我改写了这个:

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

如:

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

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

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