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]系统找不到指定的文件
如何将命令的输出存储为变量?
这里的问题:
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上安装.