从PowerShell输出文本,读入Python

从PowerShell输出文本,读入Python,python,powershell,text,Python,Powershell,Text,我正试图将各种系统指标从PowerShell脚本拉入Python,以便进一步处理。我已经选择了我需要的数据,并使用echo将其放入一个txt文件中,我正试图用Python读取该文件,但是当我查看Python数据时,我会感到胡言乱语。Powershell在输出到txt文件时是否使用了一些奇怪的编码?如果是这样,有没有办法让PowerShell以Python可以读取的格式输出,或者指示Python读取PowerShell使用的格式 PowerShell代码如下所示: with open('c:\mi

我正试图将各种系统指标从PowerShell脚本拉入Python,以便进一步处理。我已经选择了我需要的数据,并使用echo将其放入一个txt文件中,我正试图用Python读取该文件,但是当我查看Python数据时,我会感到胡言乱语。Powershell在输出到txt文件时是否使用了一些奇怪的编码?如果是这样,有没有办法让PowerShell以Python可以读取的格式输出,或者指示Python读取PowerShell使用的格式

PowerShell代码如下所示:

with open('c:\mike\output\SysConfig.txt', mode='r') as f:
    Manufacturer = f.readlines(1)
    Make = f.readlines(2)
    OS = f.readlines(3)
    CPU_Name = f.readlines(4)
    CPU_Phys_Cores = f.readlines(5)
    CPU_Log_Cores = f.readlines(6)
    CPU_Threads = f.readlines(7)
    CPU_Max_Clock = f.readlines(8)
    CPU_Curr_Clock = f.readlines(9)

print(Manufacturer)
print(Make)
print(OS)
print(CPU_Name)
print(CPU_Phys_Cores)
print(CPU_Log_Cores)
print(CPU_Threads)
print(CPU_Max_Clock)
print(CPU_Curr_Clock)
$Make=获取CimInstance CIM|U ComputerSystem |选择制造商
echo$Make.manufacturer>c:\Mike\Output\SysConfig.txt
$Model=获取CimInstance CIM|U ComputerSystem |选择模型
echo$Model.Model>>c:\Mike\Output\SysConfig.txt
$Os=获取CimInstance Win32_OperatingSystem |选择对象标题
echo$Os.caption>>c:\Mike\Output\SysConfig.txt
$CPU=获取WmiObject Win32|处理器|选择*
echo$CPU.Name>>c:\Mike\Output\SysConfig.txt
echo$CPU.NumberOfCores>>c:\Mike\Output\SysConfig.txt
echo$CPU.NumberOfLogicalProcessors>>c:\Mike\Output\SysConfig.txt
echo$CPU.ThreadCount>>c:\Mike\Output\SysConfig.txt
echo$CPU.MaxClockSpeed>>c:\Mike\Output\SysConfig.txt
echo$CPU.CurrentClockSpeed>>c:\Mike\Output\SysConfig.txt
文本输出如下所示:

with open('c:\mike\output\SysConfig.txt', mode='r') as f:
    Manufacturer = f.readlines(1)
    Make = f.readlines(2)
    OS = f.readlines(3)
    CPU_Name = f.readlines(4)
    CPU_Phys_Cores = f.readlines(5)
    CPU_Log_Cores = f.readlines(6)
    CPU_Threads = f.readlines(7)
    CPU_Max_Clock = f.readlines(8)
    CPU_Curr_Clock = f.readlines(9)

print(Manufacturer)
print(Make)
print(OS)
print(CPU_Name)
print(CPU_Phys_Cores)
print(CPU_Log_Cores)
print(CPU_Threads)
print(CPU_Max_Clock)
print(CPU_Curr_Clock)
惠普公司 HP精英电子书2570p Microsoft Windows 10 Pro 英特尔(R)Core(TM)i7-3520M CPU@2.90GHz 2. 4. 4. 2901 2901 Python代码如下所示:

with open('c:\mike\output\SysConfig.txt', mode='r') as f:
    Manufacturer = f.readlines(1)
    Make = f.readlines(2)
    OS = f.readlines(3)
    CPU_Name = f.readlines(4)
    CPU_Phys_Cores = f.readlines(5)
    CPU_Log_Cores = f.readlines(6)
    CPU_Threads = f.readlines(7)
    CPU_Max_Clock = f.readlines(8)
    CPU_Curr_Clock = f.readlines(9)

print(Manufacturer)
print(Make)
print(OS)
print(CPU_Name)
print(CPU_Phys_Cores)
print(CPU_Log_Cores)
print(CPU_Threads)
print(CPU_Max_Clock)
print(CPU_Curr_Clock)

您的问题是重定向运算符的编码是unicode(UTF16-LE)


清理:

$CS = Get-CimInstance -ClassName CIM_ComputerSystem
$OS = (Get-CimInstance -ClassName Win32_OperatingSystem).Caption
$CPU = Get-CimInstance -ClassName Win32_Processor

"{0}`n{1}`n{2}`n{3}`n{4}`n{5}`n{6}`n{7}`n{8}" -f @( $CS.Manufacturer
                                                    $CS.Model
                                                    $OS
                                                    $CPU.Name
                                                    $CPU.NumberOfCores
                                                    $CPU.NumberOfLogicalProcessors
                                                    $CPU.ThreadCount
                                                    $CPU.MaxClockSpeed
                                                    $CPU.CurrentClockSpeed
                                                  ) |
    Out-File -FilePath C:\Mike\Output\SysConfig.txt -Encoding UTF8

阅读Python中的内容没有问题

定义一些标签,用于显示输出。将整个输入文件a作为字节数组读取,对字节进行适当解码以形成字符串,并丢弃行尾(如果存在)。在行尾拆分字符串,并使用适当的标签打印每个结果字符串

vars = ["Manufacturer", "Make", "OS", "CPU_Name", "CPU_Phys_Cores", "CPU_Log_Cores", "CPU_Threads", "CPU_Max_Clock", "CPU_Curr_Clock"]

with open('SysConfig.txt', 'rb') as f:
    content = f.read().decode(encoding='UTF16').rstrip() 

for var, line in zip(vars, content.split('\n')):
    print (var, line.strip())
输出:

Manufacturer Hewlett-Packard
Make HP Compaq Elite 8300 SFF
OS Microsoft Windows 10 Pro
CPU_Name Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
CPU_Phys_Cores 4
CPU_Log_Cores 4
CPU_Threads 4
CPU_Max_Clock 3201
CPU_Curr_Clock 2700

使用
| Out File-FilePath C:\Mike\Output\SysConfig.txt-Encoding UTF8-Append
,而不是重定向操作符
>
。另外,当您已经在使用PowerShell时,使用Python有什么意义?我正在创建一个大得多的程序,无法在PowerShell中运行,但发现Python无法在我的机器上生成可靠的系统度量。您使用得不正确。参数告诉它要读取的最大行数,而不是文件中某行的索引。我建议您改用,只需将
f.readline()
放在任何地方。