Python 从 python 脚本运行另一个脚本

Posted

技术标签:

【中文标题】Python 从 python 脚本运行另一个脚本【英文标题】:Python run another script from a python script 【发布时间】:2016-09-03 14:56:26 【问题描述】:
def run_cmd(self, cmd):
    print cmd 

    status = os.system(cmd)
    print 'Command ran with Status: %s' % status

    if status:
        s = 'Command Failed: Status: %s for %s' % (status, cmd)
        print s
        sys.exit(status)
    else:
        s = 'Command Success: %s' % cmd 

    return status

我正在使用此函数从另一个脚本运行 python 脚本。

例如:

command_to_exec = 'python script_b.py'
run_cmd(command_to_exec)

现在,如果 script_b.py 失败,则 script_a.py 会以状态退出。

没关系。

案例 2

command_to_exec = 'python script_a.py --options'
rum_cmd(command_to_exec)

这个案例是 script_a.py 从自身运行'python script_a.py'。 在这种情况下,如果新生成的 script_a.py 失败,外部 script_a.py 仍然是成功的,因为它无法捕捉到内部 script_a.py 的失败(因为 sys.exit(status))

现在,我该如何处理这种情况? (如果内部 script_a 失败,外部 script_a 应该退出)

【问题讨论】:

你为什么要这样调用整个脚本?为什么不导入“内部”脚本或您需要的部分并运行它们?比如为什么不在“内部”脚本中调用函数? 使用可以使用子进程docs.python.org/2/library/subprocess.html#replacing-os-system 您可以测试sys.argv[0] 以防止自己跑,这可能会导致可怕的分叉炸弹(不断产卵过程)。 【参考方案1】:

您可以将其他脚本作为模块运行。假设您有以下文件夹: 目录 |---main.py |---imported.py 你想从第一个开始运行第二个。只需使用import,就像这样:

import imported #the file name without the extension

它将运行该文件,您将能够在主脚本中使用它的变量和函数。

【讨论】:

在我的情况下这是不可能的,因为我有不同的选项可以给生成的脚本。

以上是关于Python 从 python 脚本运行另一个脚本的主要内容,如果未能解决你的问题,请参考以下文章

我可以从另一个正在运行的 python 脚本访问列表吗

停止在另一个 Python 脚本中运行的一个 Python 脚本

当另一个 python 脚本正在运行时,如何停止我的 python 脚本?

使用python调用设置环境变量的批处理脚本并运行另一个使用它们的程序

激活 virtualenv 然后运行另一个 Python 脚本的 Python 脚本?

Python:使用另一个函数从命令行调用我的脚本