使用python中的工具验证xml - 收集输出

时间:2012-05-01 11:51:38

标签: python popen os.system xmllint

我一直试图通过os.system和os.popen来捕获这个命令的输出,但是我没有成功。我想停止命令在控制台上抛出输出,而是将输出捕获到数据结构或文件中,以进一步检查和处理它。 它使用一个名为xmllint的简单工具。 我试过了

1. p = os.popen('xmllint --noout --relaxng /home/xxxxx_id/folder_xx/xxxx/xxx/rngfile.rng /home/xxxxx_id/folder_xx/xxxx/xxx/xxx/the_xmlfile_that_needstobe_validated.xml')

2.  os.system('xmllint --noout --dtdvalid ' + path to the xml + '> xmloutput')

两者似乎都不成功,并在我的控制台上提供输出,而不是将其复制到文件或数据结构中。我需要验证超过100 xmls,并且应该能够单独检查每个outout。

帮助?

已解决:

os.system('xmllint --noout --dtdvalid ' + path to the xml + '> xmloutput 2>&1')

1 个答案:

答案 0 :(得分:4)

您应该明确使用subprocess,这样您就可以区分STDOUTSTDERR,还可以检查返回代码。此外,它是启动应用程序的首选方式。

p = subprocess.Popen(['xmllint', '--noout', '--dtdvalid', path], stdout=PIPE, stderr=PIPE)
print p.communicate()