Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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脚本调试错误?_Python_Shell - Fatal编程技术网

如何在没有回溯错误的情况下使用python脚本调试错误?

如何在没有回溯错误的情况下使用python脚本调试错误?,python,shell,Python,Shell,此函数发出NetBackup命令,将备份副本升级为主副本 运行此脚本时,它将按预期开始登录终端: def make_offsite_copies_primary(): """multi-threaded function to update OFFSITE_PREFIX volumes to primary.""" start_date = time.strftime("%m/%d/%y", time.localtime(t

此函数发出NetBackup命令,将备份副本升级为主副本

运行此脚本时,它将按预期开始登录终端:

def make_offsite_copies_primary():
    """multi-threaded function to update OFFSITE_PREFIX volumes to primary."""

    start_date = time.strftime("%m/%d/%y",
                           time.localtime(time.time() - DR_TAPE_DATE_RANGE))

    for pool in run_command([vmpool, "-listall", "-b"]).readlines():
        if pool.startswith(OFFSITE_PREFIX):
            pool = pool.split()[0]
            logentry("***\tupdating images for pool: %s" % (pool))
            command = [bpchangeprimary, "-pool", pool, "-sd", start_date]
            RunMTCommand.lck.acquire()
            # If we've reached maxthreads, then wait for one to finish
            if len(RunMTCommand.tlist) >= RunMTCommand.maxthreads:
                RunMTCommand.lck.release()
                RunMTCommand.evnt.wait()
            else:
                RunMTCommand.lck.release()
            # For some reason, we often get a "-15" RC, when updating the
            # MLC-Duplication pool.  Let's just ignore it for now.
            RunMTCommand.newthread(command, [0, 13, -15])

    for bpchange_thread in RunMTCommand.tlist:
        bpchange_thread.join()
但是,脚本中似乎没有调用bpchangeprimary命令,因为备份副本没有更改

如果直接从命令行键入“bpchangeprimary-pool MLC-LTO4-Offsite-sd 08/22/2015”,则会对备份副本进行预期更改。但是,函数中的这一行:

Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-2week
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-1month
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-1year
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-Shadow-2week
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-2week-DR-Files
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-Offsite

etc.
应该完成同样的事情,但它不是,所以我猜这个函数有问题。更糟糕的是,没有回溯错误


如果您有任何关于如何解决此问题的帮助或提示,我们将不胜感激。

实际上
command=[bpchangeprimary,“-pool”,pool,“-sd”,start\u date]
只是准备要执行的命令,而不是实际执行它

因此,当前位置的
logentry()
调用会产生误导性的日志条目

仅在此调用时/之后尝试执行命令:

command = [bpchangeprimary, "-pool", pool, "-sd", start_date]
我首先将您的
logentry()
调用(或调整其内容并添加一个新的调用)进一步向下移动,在
if下面。。。然后否则…
逻辑意味着限制线程数量-首先获得有意义的完整日志记录

这至少应该说明执行是否超过了线程限制逻辑:

  • 如果没有,那么您需要调试该逻辑
  • 如果确实如此,则关注多线程上下文中启动的线程和/或实际命令执行

您是否尝试过使用pdb(或ipdb)?在您的
RunMTCommand
类中,记录子进程通过STDOUT和STDERR管道的内容。您认为子进程是什么意思?是否值得尝试从该函数中删除所有线程内容?令人沮丧的是,没有测试环境供我使用,如果我删除线程或更改此函数并运行脚本,可能会造成损坏。您是说将日志条目行移动到函数的底部吗?如果。。。然后否则…和
RunMTCommand.newthread(…)
它没有超过线程限制逻辑,因此我试图从该函数中删除所有线程。删除线程的唯一缺点是函数运行时间更长吗?
RunMTCommand.newthread(command, [0, 13, -15])