2014-10-30 3 views
0

В моем проекте у меня есть файл jar (который был написан другим разработчиком) для копирования содержимого из pdf в текстовый файл. Используя концепцию многопоточности python, я попытался выполнить эту банку.Как выполнить файл jar в многопоточности python

После того, как я запустил этот скрипт, я могу видеть, что текстовые файлы создаются. но размер файла 0 КБ. Почему содержимое не копируется в этот файл. Однако я попытался запустить эту банку в командной строке, это работает так, как ожидалось. Может ли кто-нибудь сказать, пожалуйста, укажите решение?

from threading import Thread 
import os 
import sys 
import time 
import urllib2 
from lxml import etree, html 
import re 
import Queue 
import traceback 


def createfile(x): 
    try: 
     file="test_"+str(x) 
     print "java -jar tika-app-1.1.jar -t --encoding=utf8 \"%s\" > \"%s\" "%("C:\\samplefile.pdf",file) 
     os.system("java -jar tika-app-1.1.jar -t --encoding=utf8 \"%s\" > \"%s\" "%("C:\tmp\samplefile.pdf",file)) 
    except Exception,e: 
     print "excet",traceback.format_exc() 

def process(): 
    try: 
     result = Queue.Queue() 
     threads = [Thread(target=createfile, args=(x,)) for x in range(1,5)] 
     for t in threads: 
      t.start() 
     for t in threads: 
      t.join() 
    except: 
     print "exception",traceback.format_exc() 
     pass 
    end_time = time.time() 
    print "Estimate time", end_time - start_time 

if __name__ == '__main__': 
    process() 

Мой выход:

Exception in thread "main" java.net.MalformedURLException: unknown protocol: c 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:393) 
     at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:101) 
Exception in thread "main" java.net.MalformedURLException: unknown protocol: c 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:393) 
     at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:101) 
Exception in thread "main" java.net.MalformedURLException: unknown protocol: c 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:393) 
     at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:101) 
Exception in thread "main" java.net.MalformedURLException: unknown protocol: c 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:393) 
     at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:101) 
Estimate time 1.73799991608 
+0

Каков результат команды 'print'? –

+0

Вы уверены, что вам не нужна обратная косая черта этих обратных косых черт? Возможно, используйте необработанную строку ... – NaeiKinDus

+0

вывод команды print: java -jar tika-app-1.1.jar -t --encoding = utf8 "C: \ tmp \ sample.pdf"> "test_1" java -jar tika- app-1.1.jar -t --encoding = utf8 "C: \ tmp \ sample.pdf"> "test_2" java -jar tika-app-1.1.jar -t --encoding = utf8 "C: \ tmp \ sample .pdf " >" test_3 "java -jar tika-app-1.1.jar -t --encoding = utf8" C: \ tmp \ sample.pdf ">" test_4 " – fewtalks

ответ

2

Вы говорите приложение Java, чтобы прочитать этот файл: C: mpsamplefile.pdf потому \t превращается в символы табуляции в строке Python. Приложение Java затем видит C: без / или \ после этого и предполагает, что это должен быть URL-адрес (например, http: или ftp:). Но когда он спрашивает, обработчик протокола URL не поддерживает его, следовательно, исключение.

Чтобы избежать таких проблем, как этот, используйте os.path.join():

inputFile = os.path.join('C:', 'tmp', 'samplefile.pdf') 

Или использовать / вместо \; Java в Windows будет конвертировать эти разделители при доступе к файлам.

+0

благодарит за комментарии. TIL. – fewtalks

+0

Пожалуйста, отметьте ответ как принятый, если он решит вашу проблему. Не просто добавьте комментарий, говорящий «спасибо». Так Stackoverflow [works] (https://stackoverflow.com/tour). –

Смежные вопросы