【问题标题】:same command renders different output in terminal vs. PyCharm Python 3.7.3 on WIndows 10?相同的命令在终端与 Windows 10 上的 PyCharm Python 3.7.3 中呈现不同的输出?
【发布时间】:2020-08-07 11:40:55
【问题描述】:

我想执行这个命令: 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。如果我在终端中剪切并粘贴相同的命令,我会得到不同的结果,即使 Pycharm IDE 中的终端也会产生正确的结果:

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 build。 请帮助解决方法和/或解决方案。

【问题讨论】:

    标签: python terminal pycharm subprocess windows-10-desktop


    【解决方案1】:

    看起来,不管你怎么想,你实际上并没有在你认为的地方执行命令。

    当我运行这个时:

    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"
    

    (直接从命令行)

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

    【讨论】:

    • 我的代码和上面的命令行命令有不同的结果?他们不匹配。我试着剪切和粘贴,但它太大了。
    • 来自您的代码:DisplayName DisplayVersion Publisher ----------- -------------- --------- Adob​​e Acrobat Reader DC 20.006.20042 Adob​​e Systems Incorporated
    • 从命令行:powershell.exe -Command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object DisplayName, DisplayVersion, Publisher | Sort DisplayName -Unique" DisplayName DisplayVersion Publisher ----------- -------------- --------- Avatier Credential Provider 10.6.18080 Avatier ...
    • 我想这个“答案”告诉您,如果不调整您未在此处共享的其他相关内容,就无法复制您所描述的问题。只是为了确保我在几台不同的机器上进行了尝试,Win 10 Home、Win 10 Pro、Server 2012 R2 - 结果都相同,除了行尾没有区别。也不确定我提供的示例是否太大而无法复制和粘贴...看来您遇到的问题并不完全是您认为的问题。
    • 我的同事看到了确切的问题。我不是在想象这个。我尝试过 os.system、subprocess.run、subprocess.check_output、subprocess.Popen,都通过简单地在终端和/或 powershell 中运行命令产生了始终错误的答案?我看到 StackOverflow 上有很多类似的问题。仅供参考,我在 Windows 10、1909 包上使用 Python 3.7.3 32 位。除非它与公司笔记本电脑的安全策略有关,否则会阻止我运行 python 脚本来执行 PowerShell?我知道带有 UI 的旧 Powershell ISE,不允许我登录以运行脚本。
    【解决方案2】:

    不,我使用您的代码得到的结果不同,它太大而无法粘贴到评论部分。 它的python运行子进程shell,运行powershell。我想知道是否通过缓冲列出了某些内容?可能是访问/权限/安全问题吗?即使通过终端运行 python 脚本也会产生与直接通过终端上的 powershell 发出命令不同的结果。 Python 也有。我在 windows 10 上使用 python 3.7.3 32 但是。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多