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 がコマンドとして認識されなくなるという問題があります。