Python WindowsError 2,查找丢失的文件
我有一个python脚本,它从我的持续集成服务器获取一个JavaJAR文件,并在每次构建之后启动它。当我试图运行Jar文件时,出现了一个奇怪的错误,“[error 2]系统找不到指定的文件”。现在,如果我要使用的文件丢失或路径错误,但在WindowsError发生之前,os.path.exists()在文件上返回true,那么这就有意义了。所以,我想知道哪个文件找不到。。。也许我的启动命令的某个部分被解释为文件参数(可以理解,它丢失了)?所以我的问题是,在出现错误2的情况下,如何发现Windows找不到的文件 为确保我的问题与脚本中的其他错误无关,以下是相关的位: serverConstants.py:Python WindowsError 2,查找丢失的文件,python,windowserror,Python,Windowserror,我有一个python脚本,它从我的持续集成服务器获取一个JavaJAR文件,并在每次构建之后启动它。当我试图运行Jar文件时,出现了一个奇怪的错误,“[error 2]系统找不到指定的文件”。现在,如果我要使用的文件丢失或路径错误,但在WindowsError发生之前,os.path.exists()在文件上返回true,那么这就有意义了。所以,我想知道哪个文件找不到。。。也许我的启动命令的某个部分被解释为文件参数(可以理解,它丢失了)?所以我的问题是,在出现错误2的情况下,如何发现Window
import os
__author__ = 'Brendon Dugan'
serverJarName = "eloquence-server.jar"
backupJarName = "eloquence-server-backup.jar"
deployedJarName = "eloquence-server-jar-with-dependencies.jar"
serverLocation = os.path.join("C:" + os.path.sep, "eloquence-alpha")
serverFlag = "-isServer=true"
javaVariant = "javaw"
javaExecutable = os.path.join(os.environ["JAVA_HOME"], "bin", javaVariant)
serverStartCommand = ("start \"Eloquence Server\" /d" +
serverLocation + " \"" + javaExecutable + "\" -jar " +
os.path.join(serverLocation, serverJarName) + " " + serverFlag)
startServer.py:
import os
import subprocess
import traceback
import psutil
import serverConstants
def startServer(server):
if os.path.exists(server):
print "Server seems to exist"
os.chdir(serverConstants.serverLocation)
kwargs = {}
DETACHED_PROCESS = 0x00000008
CREATE_NEW_PROCESS_GROUP = 0x00000200
kwargs.update(creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
try:
print serverConstants.serverStartCommand
print os.getcwd()
eloquenceProcess = subprocess.Popen(serverConstants.serverStartCommand, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kwargs)
print eloquenceProcess.pid
print "Server started successfully"
return 0
except WindowsError, error:
print "A Windows Error Has Occurred"
print error.strerror
print error
print "An error occurred while starting the server"
return 1
if __name__ == "__main__":
print "Preparing to start server"
server = os.path.join(serverConstants.serverLocation, serverConstants.serverJarName)
print server
if startServer(server) == 0:
exit(0)
exit(1)
完整程序输出:
Preparing to start server
C:\eloquence-alpha\eloquence-server.jar
Server seems to exist
start "Eloquence Server" /dC:\eloquence-alpha "C:\Program Files\Java\jdk1.7.0_11\bin\javaw" -jar C:\eloquence-alpha\eloquence-server.jar -isServer=true
C:\eloquence-alpha
A Windows Error Has Occurred
The system cannot find the file specified
[Error 2] The system cannot find the file specified
An error occurred while starting the server
Process finished with exit code 1
start
是一个内置的shell。尝试向subprocess.Popen提供shell=true。看,嗯。。。有趣。我之所以选择使用“start”,首先是因为它会生成进程,然后退出,这是我无法让Python成功完成的(这导致我的CI服务器在部署阶段永远挂起)。如果您有任何建议,允许我启动jar文件,而不必等待它在我返回之前退出,我将不胜感激。然而,你已经回答了我的问题,所以如果你把它作为一个答案发布,我会接受它。我已经这么做了,所以决定它太短了,所以它神奇地将它作为一个评论。;)老实说,我不知道有什么更好的方法可以在Windows中运行后台进程。