使用python subprocess.call运行命令失败,但在键入cmd.exe时可正常工作

时间:2014-05-18 01:33:48

标签: python python-2.7 cocos2d-x

因此,我的背景是我尝试设置Cocos-2dx v3.0项目。我已经获得了创建项目的python脚本,现在我正在尝试构建和运行项目,以便我可以开始开发游戏。我遇到的问题是,每次运行构建和运行python脚本时,subprocess.call发出的命令之一都会失败。

当我自己运行在shell中传递给它的确切命令时,它运行得很好。

python中调用subprocess.call的方法:

@staticmethod
def run_cmd(command, verbose):
    if verbose:
        Logging.debug("running: '%s'\n" % ''.join(command))
    else:
        log_path = CCPlugin._log_path()
        command += ' >"%s" 2>&1' % log_path    
    print "CALLING run_cmd"
    ret = subprocess.call(command, shell=True)
    if ret != 0:
        message = "Error running command, return code: %s" % str(ret)
        if not verbose:
            message += ". Check the log file at %s" % log_path
        raise CCPluginError(message)

这在脚本中多次使用,并且每隔一段时间都会成功。

从python调用时失败但在直接输入cmd时运行正常的命令:

"C:\Users\Patrick\Downloads\apache-ant-1.9.4-bin\apache-ant-1.9.4\bin\ant" clean debug -f C:\HyperFusion\RuneWars\RuneWars\proj.android\build.xml -Dsdk.dir="C:\Users\Patrick\COPAP\Software\adt-bundle-windows-x86-20130522\sdk"

任何和所有帮助将不胜感激。我已经做了一堆谷歌搜索,但没有遇到任何似乎有帮助的事情。我是python的新手(并且真的没有预料到必须调试它,因为这些只是Cocos提供的设置脚本)所以如果我在这里错过了一些简单的话,我很抱歉。

操作系统是Windows 7,如果这与问题有关。

谢谢!

1 个答案:

答案 0 :(得分:0)

有一个原因让我问过'详细'标志。如果设置为'False',请尝试注释掉一行,如下所示:

 else:
    log_path = CCPlugin._log_path()
    # command += ' >"%s" 2>&1' % log_path    

可能会发生的情况是,下一个命令将无法打开日志文件进行写入,因为它已经被上一个命令打开了。这可能是一个很好的解释,为什么每个其他命令都会在您编写时成功。

只是一个易于检查的假设。祝你好运!