Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python WindowsError 2,查找丢失的文件_Python_Windowserror - Fatal编程技术网

Python WindowsError 2,查找丢失的文件

Python WindowsError 2,查找丢失的文件,python,windowserror,Python,Windowserror,我有一个python脚本,它从我的持续集成服务器获取一个JavaJAR文件,并在每次构建之后启动它。当我试图运行Jar文件时,出现了一个奇怪的错误,“[error 2]系统找不到指定的文件”。现在,如果我要使用的文件丢失或路径错误,但在WindowsError发生之前,os.path.exists()在文件上返回true,那么这就有意义了。所以,我想知道哪个文件找不到。。。也许我的启动命令的某个部分被解释为文件参数(可以理解,它丢失了)?所以我的问题是,在出现错误2的情况下,如何发现Window

我有一个python脚本,它从我的持续集成服务器获取一个JavaJAR文件,并在每次构建之后启动它。当我试图运行Jar文件时,出现了一个奇怪的错误,“[error 2]系统找不到指定的文件”。现在,如果我要使用的文件丢失或路径错误,但在WindowsError发生之前,os.path.exists()在文件上返回true,那么这就有意义了。所以,我想知道哪个文件找不到。。。也许我的启动命令的某个部分被解释为文件参数(可以理解,它丢失了)?所以我的问题是,在出现错误2的情况下,如何发现Windows找不到的文件

为确保我的问题与脚本中的其他错误无关,以下是相关的位:

serverConstants.py:

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中运行后台进程。