title: Using a Python Script in Java (Eclipse)
body: <p>I've been looking to incorporate a Python Script a friend made for me into a Java application that I am trying to develop. After some trial and error I finally found out about 'Jython' and used the PythonInterpreter to try and run the script. </p>
  
  <p>However, upon trying to run it, I am getting an error within the Python Script. This is odd because when I try run the script outside of Java (Eclipse IDE in this case), the script works fine and does exactly what I need it to (extract all the images from the .docx files stored in its same directory). </p>
  
  <p>Can someone help me out here? </p>
  
  <p><strong>Java:</strong></p>
  
  <pre><code>import org.python.core.PyException;
  import org.python.util.PythonInterpreter;
  
  public class SPImageExtractor
  {
      public static void main(String[] args) throws PyException
      {   
          try
          {
              PythonInterpreter.initialize(System.getProperties(), System.getProperties(), new String[0]);
              PythonInterpreter interp = new PythonInterpreter();
              interp.execfile("C:/Documents and Settings/user/workspace/Intern Project/Proposals/Converted Proposals/Image-Extractor2.py");
          }
          catch(Exception e)
          {
              System.out.println(e.toString());
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <hr>
  
  <p><strong>Java Error regarding Python Script:</strong></p>
  
  <blockquote>
    <p>Traceback (most recent call last):<br>
    File "C:/Documents and
    Settings/user/workspace/Intern
    Project/Proposals/Converted
    Proposals/Image-Extractor2.py", line
    19, in 
        thisDir,_ = path.split(path.abspath(argv[0]))
    IndexError: index out of range: 0
    Traceback (most recent call last):<br>
    File "C:/Documents and
    Settings/user/workspace/Intern
    Project/Proposals/Converted
    Proposals/Image-Extractor2.py", line
    19, in 
        thisDir,_ = path.split(path.abspath(argv[0]))
    IndexError: index out of range: 0</p>
  </blockquote>
  
  <hr>
  
  <p><strong>Python:</strong></p>
  
  <pre><code>from os import path, chdir, listdir, mkdir, gcwd
  from sys import argv
  from zipfile import ZipFile
  from time import sleep
  
  #A few notes -
  #(1) when I do something like " _,variable = something ", that is because
  #the function returns two variables, and I only need one.  I don't know if it is a
  #common convention to use the '_' symbol as the name for the unused variable, but
  #I saw it in some guy's code in the past, and I started using it.
  #(2) I use "path.join" because on unix operating systems and windows operating systems
  #they use different conventions for paths like '\' vs '/'.  path.join works on all operating
  #systems for making paths.
  
  #Defines what extensions to look for within the file (you can add more to this)
  IMAGE_FILE_EXTENSIONS = ('.bmp', '.gif', '.jpg', '.jpeg', '.png', '.tif', '.tiff')
  
  #Changes to the directory in which this script is contained
  thisDir = getcwd()
  chdir(thisDir)
  
  #Lists all the files/folders in the directory
  fileList = listdir('.')
  for file in fileList:
  
      #Checks if the item is a file (opposed to being a folder)
      if path.isfile(file):
  
          #Fetches the files extension and checks if it is .docx
          _,fileExt = path.splitext(file)
          if fileExt == '.docx':
  
              #Creates directory for the images
              newDirectory = path.join(thisDir, file + "-Images")
              if not path.exists(newDirectory):
                  mkdir(newDirectory)
  
              currentFile = open(file,"r")
              for line in currentFile:
                  print line
  
              sleep(5)
  
  
  
              #Opens the file as if it is a zipfile
              #Then lists the contents
              try:
                  zipFileHandle = ZipFile(file)
                  nameList = zipFileHandle.namelist()
  
                  for archivedFile in nameList:
                      #Checks if the file extension is in the list defined above
                      #And if it is, it extracts the file
                      _,archiveExt = path.splitext(archivedFile)
                      if archiveExt in IMAGE_FILE_EXTENSIONS:
                          zipFileHandle.extract(archivedFile, newDirectory)
              except:
                  pass
  </code></pre>