0

Windows 8のPython 2.7内から、Windowsコマンドラインを使用してこのJavaプロセスを実行する方法を知りたい.

この問題は既に解決したと思っていましたが、最近コンピューターを Windows 7 から Windows 8 に変更したところ、コードが機能しなくなりました。以下のスクリプトで使用されている Windows コマンドは、cmd.exe から直接実行した場合に正しく実行されることを確認しました。

import os
import subprocess

def FileProcess(inFile):
    #Create the startup info so the java program runs in the background (for windows computers)
    startupinfo = None
    if os.name == 'nt':
        startupinfo = subprocess.STARTUPINFO()
        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    #Execute Stanford Core NLP from the command line
    print inFile
    cmd = ['java', '-Xmx1g','-cp', 'stanford-corenlp-1.3.5.jar;stanford-corenlp-1.3.5-models.jar;xom.jar;joda-time.jar', 'edu.stanford.nlp.pipeline.StanfordCoreNLP', '-annotators', 'tokenize,ssplit,pos,parse', '-file', inFile]
    output = subprocess.call(cmd, startupinfo=startupinfo)
    print inFile[(str(inFile).rfind('\\'))+1:] + '.xml'
    outFile = file(inFile[(str(inFile).rfind('\\'))+1:] + '.xml')

FileProcess("C:\\NSF_Stuff\\ErrorPropagationPaper\\RandomTuftsPlain\\PreprocessedTufts8199PLAIN.txt")

このコードを実行すると、出力ファイルが存在しないというエラー メッセージが表示されます。私が実行している Java プロセスは、完了すると xml ファイルを出力するはずです。

何らかの理由で subprocess.call がコマンドを正常に実行していないと私は信じています。同じタスクに subprocesss.popen を使用してみましたが、同じ結果が得られました。

編集:エラーメッセージをキャプチャできるようにコードを変更しました。問題を理解し始めていると思います。

コードを次のように変更しました

import os
import subprocess

def FileProcess(inFile):
    #Create the startup info so the java program runs in the background (for windows computers)
    startupinfo = None
    if os.name == 'nt':
        startupinfo = subprocess.STARTUPINFO()
        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    #Execute Stanford Core NLP from the command line
    print inFile
    cmd = ['java', '-Xmx1g','-cp', 'stanford-corenlp-1.3.5.jar;stanford-corenlp-1.3.5-models.jar;xom.jar;joda-time.jar', 'edu.stanford.nlp.pipeline.StanfordCoreNLP', '-annotators', 'tokenize,ssplit,pos,parse', '-file', inFile]
    proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
    print proc
    stdoutdata, stderrdata = proc.communicate()
    print stdoutdata
    print stderrdata
    outFile = file(inFile[(str(inFile).rfind('\\'))+1:] + '.xml')

FileProcess("C:\\NSF_Stuff\\ErrorPropagationPaper\\RandomTuftsPlain\\PreprocessedTufts8199PLAIN.txt")

stdoutdata には、「'java' は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。」というメッセージが含まれています。

java は cmd.exe から実行すると間違いなく認識されるコマンドであるため、これは非常に奇妙なメッセージです。ここには、Python からコマンドを実行するとシステム環境変数が乱れ、Java がコマンドとして認識されなくなるという問題があります。

4

2 に答える 2