我想知道如何使用 Windows 命令行从 Windows 8 上的 Python 2.7 内部执行这个 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' 未被识别为内部或外部命令、可运行程序或批处理文件。”
现在这是一条非常奇怪的消息,因为当我从 cmd.exe 运行 java 时,它绝对是一个公认的命令。这里有一些问题,从 python 执行命令会弄乱我的系统环境变量,因此 java 不再被识别为命令。