python中的sh命令失败

时间:2011-05-06 15:37:05

标签: python exception try-catch sh

我是python的初学者。我从IP供应商处获得了这些脚本。

cmd = "sh compile_regression_vcs.sh"

try:
    self.agent.run_commands(cmd, pwd=self.agent.test_dir, extra_env=env)
except TestException as e:
    s = traceback.format_exc()
    serr = "there were errors:\n%s\n" % (s)
    self.logger.info(serr)
    raise TestException("Could not compile RTL")
except IOError as e:
    raise TestException("Could not compile RTL: %s" % str(e))

输出如下:

TestException: command 'sh' generated 2 errors, aborting.

当我在没有python的情况下单独运行sh命令时,我不会得到任何错误。我不明白为什么python会出现异常

2 个答案:

答案 0 :(得分:2)

请改为尝试:

/bin/sh compile_regression_vcs.sh

当前目录中的compile_regression_vcs.sh是什么?

答案 1 :(得分:2)

问题可能主要是shell和shell脚本的路径。 也可能是您在shell中运行的环境可能与您在python脚本中使用的环境不同。检查一下:extra_env = env

如果仍然无法解决问题,可以使用以下选项进一步调试:

您可能希望在脚本中使用某些调试来查看确切的错误。 使用sys.exc_info()是查看堆栈详细信息的好选择。

您可以在异常块中使用这段代码:

import sys
tb = sys.exc_info()[2]
    lst = format_list(extract_stack())
    for l in lst: print l,

或者您可以使用:

import traceback
traceback.print_exc()

更清洁:)

参阅:tracebacksys

您还可以运行python调试器来调试run_commands正在按预期执行。 只需将这些代码行放在try块中,您就可以进入交互式python调试器模式。

try:
    import pdb
    pdb.set_trace()
    self.agent.run_commands(cmd, pwd=self.agent.test_dir, extra_env=env)

您可以稍后在python调试器模式中键入帮助以查看所有可用选项。 参考: pdb

您还可以使用检查模块: inspect module