当前位置:  开发笔记 > 编程语言 > 正文

Python子流程引入了空间

如何解决《Python子流程引入了空间》经验,为你挑选了1个好方法。

我有一个使用subprocess.Popen执行Windows*.exe文件的python脚本.除一个之外的所有EXE产生预期输出.当使用print()打印时,所讨论的输出包括输出的每个字符之间的空格.

这是在Windows命令行中执行EXE时输出的外观:

C:\Python27>autorunsc.exe /accepteula

Sysinternals Autoruns v13.51 - Autostart program viewer
Copyright (C) 2002-2015 Mark Russinovich
Sysinternals - www.sysinternals.com


HKLM\System\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\StartupPrograms
   rdpclip
     rdpclip
     RDP Clip Monitor
     Microsoft Corporation
     6.1.7601.17514
     c:\windows\system32\rdpclip.exe
     20/11/2010 11:22

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
   C:\Windows\system32\userinit.exe

这是在Python中打印时的外观:

Sysinternals Autoruns v13.51 - Autostart program viewer
Copyright (C) 2002-2015 Mark Russinovich
Sysinternals - www.sysinternals.com


 H K L M \ S y s t e m \ C u r r e n t C o n t r o l S e t \ C o n t r o l \
 r m i n a l   S e r v e r \ W d s \ r d p w d \ S t a r t u p P r o g r a m
       r d p c l i p
           r d p c l i p
           R D P   C l i p   M o n i t o r
           M i c r o s o f t   C o r p o r a t i o n
           6 . 1 . 7 6 0 1 . 1 7 5 1 4
           c : \ w i n d o w s \ s y s t e m 3 2 \ r d p c l i p . e x e
           2 0 / 1 1 / 2 0 1 0   1 1 : 2 2

 H K L M \ S O F T W A R E \ M i c r o s o f t \ W i n d o w s   N T \ C u r
 n t V e r s i o n \ W i n l o g o n \ U s e r i n i t

我们可以清楚地看到空白,有趣的是前几行不包含空格.

这是代码:

p = subprocess.Popen('autorunsc.exe /accepteula', stderr=subprocess.STDOUT,
stdout=subprocess.PIPE, shell=True)
a=p.stdout.read()
print(a)

空间来自何处以及如何删除它们?



1> Łukasz Rogal..:

Windows工具输出格式以UTF-16编码.

您必须使用str.decode方法解码输出以纠正编码.引用文档:

str.decode([encoding[, errors]])

使用为编码注册的编解码器对字符串进行解码.encoding默认为默认字符串编码.可以给出错误以设置不同的错误处理方案.默认值为'strict',表示编码错误会引发UnicodeError.其他可能的值是'ignore','replace'以及通过codecs.register_error()注册的任何其他名称,请参阅Codec Base Classes部分.

a=p.stdout.read().decode('UTF16')

有关标准编码表,请参阅7.8.3.标准编码.

由于您的输出似乎具有混合编码[作为"空格"(实际上是0x00字符,而不是0x20仅存在于输出的一部分中),因此您可能需要在执行解码之前对字符串进行预处理或分区.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有