测试使用子进程产生bash子shell的python脚本..有可能吗?
问题描述:
我有一个相当复杂的项目,我想测试..但我找不到如何完全测试它。测试使用子进程产生bash子shell的python脚本..有可能吗?
该项目本身是django的开发环境。它包含一个Python脚本,可用于创建新项目或激活开发环境。
要激活开发环境,我使用类似Virtualenv的技术。我的python脚本调用一个本身源自一个rcfile的shell脚本。
这听起来比实际上更复杂。工作流程是这样的:
$ cd my-project/
$ duke dev
(my-project)$
公爵是我的Python脚本调用一个名为dev的bash脚本。开发脚本只包含这样一行:
#!/ bin/bash 。/path/to/bin/env
因此,它基本上只是启动一个子shell,在该子shell中我生成一个名为env的rc文件。
env本身需要在开发过程中创建所需的所有命令和环境变量。
我的问题是,我无法测试任何特定于此env的东西,因为我的脚本产生了一个子进程,然后在子shell中激活env。子进程关闭,子外壳一直打开,直到我退出。
虽然它的工作,我无法找到一种方法来可靠地测试它。
它甚至可以测试这个吗?
下面的代码: https://github.com/h3/django-duke-client/blob/master/dukeclient/commands/dev.py#L22
- dev的脚本调用
答
您运行的任何脚本将始终产生一个子shell。
在启动Python代码之前,您应该先致电. %(base_path)s/.duke/bin/env
,无论是在命令行还是作为生成python的同一脚本的一部分。
不要忘记导出可能在子流程中使用的变量和函数。
这几乎是我到目前为止的结论..现在我问自己的问题是,如果有可能为一个subshell退出本身。如果可以,我可以用测试标志调用我的脚本,使env在激活时运行一个测试套件,然后退出。如果它有效,它可能会解决我的问题。 – 2012-03-03 04:54:06