我一直试图通过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')
答案 0 :(得分:4)
您应该明确使用subprocess,这样您就可以区分STDOUT
和STDERR
,还可以检查返回代码。此外,它是启动应用程序的首选方式。
p = subprocess.Popen(['xmllint', '--noout', '--dtdvalid', path], stdout=PIPE, stderr=PIPE)
print p.communicate()