Oswalt (16-10) threw only 79 pitches while scattering five hits in continuing his late-season resurgence with the fifth win in his last six decisions.
Miguel Tejada led Houston's attack with three hits in five at-bats, with one RBI and two runs scored. Brad Ausmus had two hits and one RBI. Lance Berkman knocked in a run and, like Tejada, Michael Bourn had three hits for the Astros, who trail the National League wild card-leading New York Mets by four with seven games remaining.
Pittsburgh's Luis Cruz and Brandon Moss had one RBI apiece. Ryan Duomit had three hits and Freddy Sanchez two for the Pirates, who have lost three of four.
Losing pitcher Ross Ohlendorf (0-3) yielded four earned runs on 10 hits in five innings.