使用python subprocess.call运行命令失败,但在cmd.exe中输入时正常成功
背景是我正在尝试设置一个 Cocos-2dx v3.0 的项目。我已经让创建项目的 Python 脚本运行起来了,现在我想构建并运行这个项目,以便开始开发一个游戏。不过,我遇到的问题是,在运行构建和运行的 Python 脚本时,subprocess.call 发出的一个命令每次都会失败。但是,当我自己在命令行中直接运行这个命令时,它却能正常工作。
在 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 中调用时失败的命令,但在直接输入到命令行时却能正常运行:
"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
我问关于'verbose'标志的原因是有的。如果这个标志设置为'False',可以尝试把下面的一行注释掉:
else:
log_path = CCPlugin._log_path()
# command += ' >"%s" 2>&1' % log_path
可能会发生的情况是,下一条命令无法打开日志文件进行写入,因为这个文件已经被上一条命令打开了。这可以很好地解释为什么你提到的其他命令都成功了。
这只是一个假设,应该很容易验证。祝你好运!