【问题标题】:Running command with python subprocess.call fails but works correctly when typed into cmd.exe使用 python subprocess.call 运行命令失败,但在输入 cmd.exe 时可以正常工作
【发布时间】:2014-07-06 05:35:07
【问题描述】:

所以背景是我正在尝试设置一个 Cocos-2dx v3.0 项目。我已经获得了创建要运行的项目的 python 脚本,现在我正在尝试构建和运行该项目,以便我可以开始开发游戏。根据问题,我遇到的问题是 subprocess.call 发出的命令之一在每次运行构建和运行 python 脚本时都会失败。但是,当我自己在 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,如果这对问题有任何影响。

谢谢!

【问题讨论】:

  • 失败时给出的错误是什么?
  • 具体来说,检查正在写入的日志文件以了解故障的具体情况。
  • 我不知道正在写入任何日志文件。错误是“文件名、目录名或卷标语法不正确。”
  • 命令运行时'verbose'标志的值是多少?
  • 在执行之前尝试打印您的命令。我的直觉是检查你的引号如何显示输出。

标签: python python-2.7 cocos2d-x


【解决方案1】:

我询问“详细”标志是有原因的。如果设置为“False”,请尝试注释掉一行,如下所示:

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

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

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

【讨论】:

  • 我这样做了,现在除了第一个命令之外发生了同样的错误。也很详细,我也检查过,所以没有日志文件输出只是被写入终端。
  • 那么我要检查的最后一件事是是否有可能在旧命令或其子进程仍在运行时启动新命令。如果可能并且两个命令都写入相同的文件,那么我的假设可能仍然有效。
  • 好吧,我看看能不能确定是不是这样。关于在我开始之前如何确定这样的事情有什么建议吗?
  • Ctrl-Shift-Esc 或右键单击任务栏并选择“启动任务管理器”。单击“进程”选项卡以查看正在运行的内容。
  • 哇,希望有比这更好的方法......哦,好吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多