【发布时间】:2013-03-04 15:56:35
【问题描述】:
我正在用 Python 为命令行应用程序编写一个测试框架。应用程序将创建目录,调用当前目录中的其他 shell 脚本,并将输出到 Stdout。
我试图将 {Python-SubProcess, CommandLine} 组合视为等同于 {Selenium, Browser}。第一个组件播放第二个组件并检查是否预期输出。我面临以下问题
- Popen 构造接受一个命令并在该命令完成后返回。我想要的是进程的实时句柄,这样我就可以运行进一步的命令 + 验证,并最终在完成后关闭 shell
- 我可以编写一些基础设施代码来实现这一点,因为我们有很多命令行应用程序需要像这样进行测试。
这是我正在运行的示例代码
p = subprocess.Popen("/bin/bash", cwd = test_dir)
p.communicate(input = "hostname") --> I expect the hostname to be printed out
p.communicate(input = "time") --> I expect current time to be printed out
但是进程挂起或者可能是我做错了什么。另外,我如何“获取”该子流程的输出,以便我可以断言某些东西存在?
【问题讨论】:
-
您不能为一个进程调用两次communicate()。我已经更新了答案。
-
communicate('hostname\ntime\nexit\n') 可能吗?您真的需要以交互方式处理流程,还是只执行多个命令?后者更容易。
标签: python subprocess