I think you can let the assumption system help you -- just create Dummy(real=True) which will limit the roots you get:

```
>>> var('x')
x
>>> len(solve(x**4-3*x**3-x+2))
4
>>> var('x', real=True)
x
>>> len(solve(x**4-3*x**3-x+2))
2
```