[相同命令在Windows 10上的终端与PyCharm Python 3.7.3中呈现不同的输出?

问题描述 投票:0回答:2

我要执行此命令:powershell.exe -Command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher | Sort DisplayName -Unique"在Pycharm IDE中使用Python 3.7.3。如果我在Terminal中剪切并粘贴相同的命令,将会得到不同的结果,即使Pycharm IDE中的Terminal也会产生正确的结果:

DisplayName                                                                         DisplayVersion     Publisher
-----------                                                                         --------------     ---------

Avatier Credential Provider                                                         10.6.18080         Avatier Corporation
Avatier SetUpCachedCred 64-bit                                                      1.0.6              Avatier
.....

但是运行框架,通过os.system(cmd)或subprocess.Popen(...),subprocess.check_output(...)执行相同的命令,我得到的结果类似:

DisplayName                                                        DisplayVersion   Publisher                        
-----------                                                        --------------   ---------                        

Adobe Acrobat Reader DC                                            20.006.20042     Adobe Systems Incorporated       
Adobe Refresh Manager                                              1.8.0            Adobe Systems Incorporated       
BootRacer 7.90                                                     7.90             Greatis Software                 
Carbon Black Sensor                                                6.2.2.90503      Carbon Black, Inc.
...

这是同一台物理计算机,Windows 10,1909年版本。请提供解决方法和/或解决方案的帮助。

python terminal pycharm subprocess windows-10-desktop
2个回答
0
投票

尽管您有什么想法,您似乎实际上并没有在您认为的位置执行该命令。

当我运行此命令时:

import subprocess

args = [
    r'powershell.exe',
    r'-Command',
    r'Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher | Sort DisplayName -Unique'
]

result = subprocess.run(args, capture_output=True)

print(result.stdout.decode('windows-1252'))

((来自PyCharm,或带有python test.py的命令行)

与运行此命令时得到的结果几乎相同:

powershell.exe -Command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher | Sort DisplayName -Unique"

(直接从命令行)

唯一真正的区别是行尾,但这不是您的问题。


0
投票

不,我使用您的代码的结果有所不同,太大了,无法粘贴到注释部分。它的python正在运行子进程shell,正在运行powershell。我想知道是否通过缓冲列表?可能是访问/权限/安全性问题吗?甚至通过终端运行python脚本所产生的结果也与通过终端上的powershell直接发出命令的结果不同。 Python也有。我在Windows 10上使用python 3.7.3 32 buts。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.