我要执行此命令: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年版本。请提供解决方法和/或解决方案的帮助。
尽管您有什么想法,您似乎实际上并没有在您认为的位置执行该命令。
当我运行此命令时:
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"
(直接从命令行)
唯一真正的区别是行尾,但这不是您的问题。
不,我使用您的代码的结果有所不同,太大了,无法粘贴到注释部分。它的python正在运行子进程shell,正在运行powershell。我想知道是否通过缓冲列表?可能是访问/权限/安全性问题吗?甚至通过终端运行python脚本所产生的结果也与通过终端上的powershell直接发出命令的结果不同。 Python也有。我在Windows 10上使用python 3.7.3 32 buts。谢谢。