# File lib/nmap/parser.rb, line 229
        def self.parsescan(nmap, args, targets = []) # :yields: parser
                if args =~ /[^-]-o|^-o/
                        raise "Output option (-o*) passed to parsescan()"
                end

                # Enable debugging, give us our XML output, pass args
                command = nmap + " -d -oX - " + args + " "

                command += targets.join(" ") if targets.any?

                p = nil

                begin
                        # First try popen3() if it loaded successfully..
                        Open3.popen3(command) do |sin, sout, serr|
                                p = parseread(sout)
                        end
                rescue NameError
                        # ..but fall back to popen() if not
                        IO.popen(command) do |io|
                                p = parseread(io)
                        end
                end

                yield p if block_given?

                p
        end