1

我一直在尝试通过 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 多个 xml,并且应该能够单独检查每个输出。

帮助?

解决方法:

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

1 回答 1

4

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

p = subprocess.Popen(['xmllint', '--noout', '--dtdvalid', path], stdout=PIPE, stderr=PIPE)
print p.communicate()
于 2012-05-01T12:33:53.707 回答