Brian Hunter went three for four and Craig Biggio was two for three for the Astros, who have won four in a row and are half a game behind the Dodgers. Pittsburgh lost its fifth in a row.
Swindell (9-9) got his first victory as a starter since July 29, giving up six hits in the first three innings but none in the next three.
Swindell was removed from the rotation Aug. 26 and has been used in relief and as a spot starter since then.
"It's been different, starting and relieving," Swindell said, "but I think it's gotten to the point now that whatever it takes to get the job done, that's what I'll do."
Denny Neagle (13-8) kept the Astros under control on three hits until the fifth. A run scored when second baseman Carlos Garcia dropped a grounder, and another on Biggio's infield hit.
Atlanta 5, Philadelphia 1--Ryan Klesko had a three-run home run and four runs batted in, while it took five Brave pitchers to hold the Phillies to three hits at Philadelphia.
Klesko's 22nd home run came off Paul Quantrill (11-11) and capped a four-run first inning for Atlanta. In his last 21 games, Klesko has eight home runs and 21 RBIs.
Montreal 5, Florida 4--Wil Cordero doubled home the tying run with two outs in the ninth and scored on Tim Laker's single in the game at Miami.
Robb Nen (0-7) was one strike from victory when rookie Yamil Benitez reached base on a single to third. Cordero then doubled into the left-field corner, scoring Benitez from first. It was Nen's sixth blown save in 29 chances.
Tony Tarasco and Sean Berry hit solo home runs for the Expos.
Chicago 3, St. Louis 2--Steve Trachsel overcame his Wrigley Field jinx and Mark Grace set a career high with his 15th homer to lead the Cubs.
Trachsel (7-13) won for only the second time in 14 starts this season at Wrigley. He worked 7 1/3 innings and gave up two runs and five hits with one walk and five strikeouts to snap a personal three-game losing streak.
Randy Myers, the third Cubs' pitcher, struck out three of the four batters he faced to get his league-leading 37th save.
San Diego 6, San Francisco 3--Andy Ashby won his third consecutive start and Melvin Nieves hit a home run for the second day in a row, leading the Padres at San Francisco.
Ashby (12-10) gave up 10 hits, didn't walk a batter and struck out two in 8 1/3 innings. Trevor Hoffman earned his 29th save.