HOUSTON -- Houston's Bud Norris had waited more than four long months since his previous win.
The last few minutes of that wait might have been the toughest.
Norris pitched into the eighth inning for his first win since May 21, Jose Altuve homered and the Astros avoided a sweep with a 2-0 win Wednesday night over the St. Louis Cardinals, who are vying for the second National League wild card.
After he left the game, he stood nervously in the dugout, fidgeting as he watched Wilton Lopez work a five-out save to complete the three-hitter and guarantee Norris the victory.
"It means a lot. It's been a long year for me," Norris said of getting the win. "I've dealt with a lot of little things here and there. Blister, to hip flexor to knee to scalp, it's just been a frustrating year on that part ... so to win meant a lot."
Norris (6-13) allowed two hits and struck out seven without a walk in a season-high 7 1/3 innings to snap a career-long 12-game losing streak that spanned 18 starts.
It was the last NL game in Houston with the Astros moving to the American League West for 2013.
The victory broke the Cardinals' 10-game winning streak over Houston and cut their lead over Los Angeles and Milwaukee to 3 1/2 games for the second NL wild-card spot after both teams won Wednesday.
Norris hurled the gem despite a tough stretch in which he has been slowed by a blister on the index finger of his right hand and flu-like symptoms. He was helped Wednesday by a liquid skin adhesive his sister sent him that he used on his blister.
He was emotional following the win as he reflected on his time with the team. He'll be arbitration eligible this offseason, so there's a possibility Wednesday's start could be his last in Houston.
"I've seen a lot in three years here, a lot of trades, a lot of moves, new owners, new manager, new bench coaches, coaches all over," he said. "There's only been a couple of guys in this locker room that have been here this long with me. We've been through a lot. We've seen a lot at a young age (and) learned to deal with adversity."
Lopez got his eighth save, and Norris clapped his hands once and smiled when Houston got the final out.
Interim Houston manager Tony DeFrancesco was happy to see Norris get back in the win column.
"That's a guy we're hoping to be a No. 1 starter," he said. "Once he's healthy, he proves the guy can pitch."
Chris Carpenter (0-1) allowed four hits and two runs in six innings in his second start since missing 150 games following right shoulder surgery.
"He threw the ball much better tonight," Cardinals manager Mike Matheny said. "I thought he had much better stuff, too, and the ball was jumping out of his hand. He kept us there and gave us a chance to win."
Norris struck out Pete Kozma before he was lifted for Lopez. Pinch hitter Carlos Beltran grounded into a forceout that left Descalso out at second and Chambers on third base, before Jon Jay grounded into a forceout to end the threat.
Altuve connected on Carpenter's first pitch of the fourth inning for Houston's first hit, a homer to the Crawford Boxes in left field, to make it 1-0.
Maxwell stole second base before scoring on Wallace's double to right field, which pushed the lead to 2-0.
Norris was perfect through the first three innings. Jay doubled to start the fourth for the Cardinals' first hit. But Norris got right back on track, retiring the next seven batters. Carpenter singled with one out in the sixth before Norris retired the next two Cardinals to end the inning.
Carpenter hit Fernando Martinez to start Houston's third, but faced the minimum through three thanks to a double play in that inning.
He threw 92 pitches after throwing 77 in five innings of a no-decision Friday in his first start since the injury. It was his first start against Houston since throwing a two-hitter last Sept. 28 to clinch the NL wild card.
DeFrancesco is one of the candidates to be Houston's manager next season, but told The Associated Press after Wednesday's game that he's been guaranteed a job somewhere in the organization next season regardless of the outcome of the managerial search.
Cardinals 3B David Freese missed his third straight game after rolling his right ankle in pregame warmups in the batting cage Monday. He said he's feeling better and expects to play when the Cardinals open a series against the Nationals on Friday after a day off Thursday. ... Hall of Fame broadcaster Milo Hamilton, who had the memorable call on Henry Aaron's 715th home run, called his last game for the Astros on Wednesday night. Hamilton, who doesn't call out of town games, is retiring after 59 seasons calling major league games. Hamilton has called the Astros for 28 seasons. He said Wednesday that the call of Aaron's 715th home run was the most memorable of his career, and other top memories were his calls of Mike Scott's no-hitter in 1986 and Craig Biggio's 3,000th hit in 2007. Asked how many games he'd called in his career he answered: "It's thousands. But now who's counting?" ... Houston OF J.D. Martinez had surgery to repair the injured hamate bone in his left wrist Wednesday. He can resume baseball activities in four to six weeks.