Skip to main content
 首页 » 编程设计

python之子进程未从使用 Nose 运行的 Django 测试中捕获所有标准输出

2025年05月04日22小虾米

使用子进程执行测试如下:

subprocess.Popen(["./manage.py", "test", "-x", "--settings=settings_test"], stdout=subprocess.PIPE, stdin=subprocess.PIPE).communicate() 

仅捕获测试输出的初始部分。所以我得到了返回的元组

 ("\x1b[32mUsing database: develop\x1b[0m\n\x1b[33mRunning tests against sqlite3 in memory database\x1b[0m\nnosetests --verbosity 1 -x\nCreating test database for alias 'default'...\nDestroying test database for alias 'default'...\n", None) 

但是,这错过了关键的最后三行

Ran 260 tests in 70.131s 
 
OK (SKIP=1) 

有没有办法使用子进程捕获此输出?

请您参考如下方法:

那是因为摘要是写到 stderr 的,所以你也需要捕捉它。

sub = subprocess.Popen( 
        ["./manage.py", "test", "-x", "--settings=settings_test"], 
        stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = sub.communicate() 
# err should have the summary