import os
from rdflib import Graph
import subprocess

from module import Module

class ExecCLI(Module):

    def __init__(self, mInstanceIRI, moduleDir):
        # input graph to STDIN
        # output graph to STDOUT
        ### executable
        ### arguments
        Module.__init__(self,  "http://topbraid.org/sparqlmotionlib#execCLI", mInstanceIRI, moduleDir)
        self.executable = self.getParameter('executable')

    def run(self):
        arguments = self.getParameter('arguments')

        inputGraph = self.getInputGraph();
        dir = self.getParameter('workingDir')
        dir = self.moduleDir + os.sep + dir if dir else self.moduleDir

        print os.getcwd(), " : ",dir

        try:
            command = self.executable + " " + arguments + " "
            print "- running: ", command

            process = subprocess.Popen(command.split(), stdin=subprocess.PIPE if inputGraph else None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=dir)
            if inputGraph:
                process.stdin.write(inputGraph.serialize(format='nt', destination=None))

            self.outputGraph = Graph()

            if not self.getParameter('skipStdout'):
                print "- skipping STDOUT"
                self.outputGraph.parse(source=process.stdout, format='nt')

            out, err = process.communicate()
            # if out:
            #     print "standard output of subprocess:"
            #     print out
            if err:
                print "ERROR: ",err

        finally:
            print ""
