上下文:我想通过python脚本在远程windows机器上安装".msi“文件。
我已经在远程windows机器上安装了cygwin,并且ssh服务正在运行。我通过ssh在远程windows机器上使用python脚本从Linux主机执行命令。对于msi文件的安装,我使用了以下命令:
msiexec /package "msi文件名“/quiet /norestart /log”日志文件名(假设为instlog.log)“
现在,为了验证安装是否成功,我列出了日志文件(instlog.log)的内容,并检查字符串“安装成功或错误状态: 0”。
问题:
"type“命令在cygwin中不起作用。所以我试着用"cd {0};cat {1} |.format-5“尾巴(FileLocation,FileName)来列出文件内容,但是我得到了不同格式的输出,python脚本无法在输出中匹配上面提到的字符串。这是我想要在控制台上显示的内容:
MSI (64:74) 18:03:51:360: Windows Installer安装了该产品。产品名称: pkg-name。产品版本: 0.2.24-10891。产品语言: 1033。制造商: XYZ公司。安装成功或错误状态: 0。
我实际得到的是:
M S I(S)(6 4:74)1 8:0 3:5 1:3 6 0:w i d o w s i n s t a l l e r i n s t a l l e d t h e p r o d u c t.P r o d u c t N a m e:p k g-n a m e.P r o d u c t V e r s i o n:0。2.2 4-1 0 8 9 1.P r o d u c t L a n g u a g e:1 0 33.M a n u f a c t u r r:x y Z C o m p a n y.I s t a l l a t i o n s u c e s s o r e r r o r s t a t u s:0。
因此,在输出中的每个字符后面都引入了额外的空格。我想知道如何才能以正常的方式而不是空格分隔的格式获得输出。谢谢。
发布于 2015-06-10 18:08:31
问题是msiexec将其日志文件保存为Unicode格式。在Windows中,Unicode由2个字符组成(这意味着您看到的每个字符都以2个字节或字符的形式存储在内存中):第一个字符是代码页编号,第二个字符是该代码页中的字符条目(即字符本身)。因为您运行的是英语版本,所以代码页编号是0(或者\0、\x00或NULL)。一些流行的编辑器足够聪明,可以解决编码问题,只显示字符(不显示交错的空字符)。现在有一些方法可以解决这个问题。
tail --version来查看)。下面是一些输出(我在结尾处包含了hexdump,以显示文件是unicode格式的):cat unicode.txt
收益率:unicode chars
尾部unicode.txt
收益率:unicode chars
十六进制转储unicode.txt
收益率:
0000000 0075 006e 0069 0063 006f 0064 0065 0020 0000010 0063 0068 0061 0072 0073 000d 000a 000001e
F= open("some_msi_log_file.log","rb") text = f.read() f.close()
然后你在text上进行处理。如果您将上面的代码修改为:
F= open("some_msi_log_file.log","rb") unicode_text = f.read() f.close() text =“”.join(如果字符!=‘\x00’,unicode_text中字符的字符)
text将不再包含ASCII (并且还可以处理常规的\x00文件)。
发布于 2015-06-10 19:00:37
日志文件应转换为8位宽的格式,如UTF8。这可以通过iconv命令来实现。您应该使用cygwin安装程序安装它,然后使用以下命令:
iconv -f ucs2 -t utf8 instlog.log > instlog2.loghttps://stackoverflow.com/questions/30751882
复制相似问题