2016-11-08 11 views
1

MAC OSのlocalserverのDjangoプロジェクトでJavaプログラムhttps://github.com/antonydeepak/ResumeParser/を使用する際に問題が発生しています。Python呼び出しJavaの原因エラー:メインクラスが見つかりません。

私のようなDjangoのプロジェクトでResumeParserをインストールしている:

- ジャンゴプロジェクト - APP1 - APP2 - ResumerParserここ

私のコードがあるが、それは見つかりませんでした」と言いますか、主なクラスをロードする "。

if form.is_valid(): 
    f = form.save(commit=False) 

    resume = form.cleaned_data['resume'] 

    cmd = ['java', '-cp', 'bin/:../GATEFiles/lib/:../GATEFiles/bin/gate.jar:lib/*', 'code4goal.antony.resumeparser.ResumeParserProgram %s textOutput.json' % resume] 

    subprocess.Popen(cmd) 

これを解決する手掛かりはありますか? StackOverflowでこのテーマに関連するすべての投稿を成功させました。事前

答えて

0

2週間後:

スプリットすべてあなたのパラメータと、それは動作しますが、subprocessはしませんグループあなたのパラメータを、無引用(strからresumeオブジェクトの強制改宗に注意してください)それは働いている。 すべてのファイルをResumeParser/ResumeTransducerディレクトリにコピーする必要があります。

また、ファイル解析のために現在のディレクトリに通知する必要があります。ここで

は実装です:

# first save the file 
if form.is_valid(): 
    f = form.save(commit=False) 

    resume = form.cleaned_data['resume'] 
    f.resume = resume 
    f.save() 

    # copy file to the CV parser dir so java can parse the file 
    cf = "." + f.resume.url 
    shutil.copy2(cf, 'ResumeParser/ResumeTransducer') 

    # get file to convert 
    fl_name = str(f.resume).split('/')[-1] 

    # get file name to make json output 
    base_name = os.path.splitext(fl_name)[0] 

    cmd = "java -cp 'bin/*:../GATEFiles/lib/*:../GATEFiles/bin/gate.jar:lib/*' code4goal.antony.resumeparser.ResumeParserProgram %s %s.json" % (fl_name, base_name) 

    # get the current working dir  
    os.chdir("ResumeParser/ResumeTransducer") 

    # call java 
    subprocess.Popen(cmd, shell=True) 

感謝ジャン=フランソワ・ファーブル!

1

ありがとうございますスペースでグループ化されたパラメータを持つだけでなく、区切りのパラメータを混合しています。

cmd = ['java', '-cp', 'bin/:../GATEFiles/lib/:../GATEFiles/bin/gate.jar:lib/*', 'code4goal.antony.resumeparser.ResumeParserProgram %s textOutput.json' % resume] 

あなたの最後のパラメータは、単一のパラメータとして見られているとsubprocessでスペースによって保護されています:

"code4goal.antony.resumeparser.ResumeParserProgram resume_value textOutput.json"

=>全体"class<space>param1<space>param2"があなたのクラスとして見られている:それが見つからないだ理由も不思議ではありません。私が得た

cmd = ['java', '-cp', 'bin/:../GATEFiles/lib/:../GATEFiles/bin/gate.jar:lib/*', 'code4goal.antony.resumeparser.ResumeParserProgram', str(resume),'textOutput.json'] 
+0

ありがとうございました。今私は新しいエラーがあります:execv()arg 2は文字列だけを含んでいなければなりません –

+0

申し訳ありません! 'resume'オブジェクトを文字列に変換する必要がありました。私の編集を参照してください。 –

関連する問題