【问题标题】:Testing a python script which use a subprocess to spawn a bash subshell .. is it possible?测试使用子进程生成 bash 子shell 的 python 脚本 .. 有可能吗?
【发布时间】:2012-03-02 20:39:02
【问题描述】:

我有一个非常复杂的项目,我想对其进行测试.. 但我找不到完全测试它的方法。

项目本身就是一个django的开发环境。它由一个 Python 脚本组成,可用于创建新项目或激活开发环境。

为了激活开发环境,我使用了类似 Virtualenv 的技术。我的 python 脚本调用了一个 shell 脚本,该脚本本身就是一个 rcfile。

这听起来比实际上要复杂。工作流程如下所示:

$ cd my-project/
$ duke dev
(my-project)$

duke 是我的 Python 脚本,它调用名为 dev 的 bash 脚本。开发脚本只包含这样的一行:

#!/bin/bash . /path/to/bin/env

所以它基本上只是启动一个子shell,我在其中获取一个名为 env 的 rcfile。

env 本身负责创建开发过程中所需的所有必要命令和环境变量。

我的问题是我无法测试特定于此环境的任何内容,因为我的脚本会生成一个子进程,然后在子shell 中激活该环境。子进程关闭,子外壳保持打开状态,直到我退出它。

虽然它有效,但我找不到可靠测试它的方法。

甚至可以测试这个吗?

代码如下:

【问题讨论】:

    标签: python unit-testing bash


    【解决方案1】:

    您运行的任何脚本都会生成一个子shell。

    您应该在启动您的 python 代码之前调用. %(base_path)s/.duke/bin/env,无论是在命令行上还是作为生成 python 的同一脚本的一部分。

    不要忘记导出您可能在子流程中使用的变量和函数。

    【讨论】:

    • 这几乎是我到目前为止得出的结论。现在我问自己的问题是子shell 是否有可能自行退出。如果可以的话,我也许可以使用测试标志调用我的脚本,以使 env 在激活时运行测试套件,然后退出。如果它有效,它可能会解决我的问题。
    猜你喜欢
    • 2013-09-26
    • 2019-11-21
    • 2010-11-01
    • 2013-05-29
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多