如何在python中进行系统调用并将输出存储在给定的输出目录中?

时间:2014-10-20 13:38:10

标签: python system-calls stanford-nlp

我正在使用Stanford CoreNLP,现在我正在使用命令行中的以下命令运行coreNLP工具包:

java -cp stanford-corenlp-2012-07-09.jar:stanford-corenlp-2012-07-06-models.jar:xom.jar:
joda-time.jar -Xmx3g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,
pos,lemma,ner -filelist file_list.txt -outputDirectory <OUTPUT DIRECTORY PATH>

这会生成带有所需注释的xml文件。现在我需要在python中的函数内部使用此命令,以便将输出存储在output_dir中。功能如下:

def preprocess(file_list.txt, ouptut_dir)

我读过系统调用和使用子进程,但我不太明白如何使用它,以便将输出写入给定的output_dir。

请帮助!!!

3 个答案:

答案 0 :(得分:1)

我建议你使用Python interface to Stanford Core NLP tools而不是通过子进程等来调用它。

答案 1 :(得分:0)

import subprocess

def preprocess(input_file, output_dir):
    cmd = ["java", "-cp", "<the-whole-jar-mess>", "-Xmx3g", 
           "edu.stanford.nlp.pipeline.StanfordCoreNLP",
           "-annotators", "tokenize,ssplit,pos,lemma,ner",
           "-filelist", input_file,  "-outputDirectory",
           output_dir]
    subprocess.check_call(cmd)

请注意我添加到命令行的缩写,不必将所有jar格式化为命令,显然需要用你传递的jar列表替换它。

答案 2 :(得分:0)

这与subprocess没有多大关系,而是与CLI中如何使用Stanford CoreNLP有关。假设-outputDirectory标志告诉它存储输出的位置,那么传递正确的CLI参数就很简单了。这是一个主张:

import subprocess

def preprocess(fname, output_dir):
    subprocess.check_call([
        'java',
        '-cp',
        'stanford-corenlp-2012-07-09.jar:stanford-corenlp-2012-07-06-models.jar:xom.jar:joda-time.jar',
        '-Xmx3g', 'edu.stanford.nlp.pipeline.StanfordCoreNLP'
        '-annotators', 'tokenize,ssplit,pos,lemma,ner',
        '-filelist', fname,
        '-outputDirectory', output_dir
    ])