PITTSBURGH -- Maybe all James McDonald needed to pitch deep into a game was a little urging from Mother Nature.
"Great tempo, rhythm, all of it," Pittsburgh manager Clint Hurdle said. "This was a big step forward for him."
McDonald can be dazzling at times with his electric 95 mph fastball but often struggles with his command, making it difficult to last into the later innings.
There were no such issues against the Astros. McDonald (9-7) threw 91 pitches before leaving with one out in the eighth following the second-longest outing of his career. He may have made a run at a complete game if not for a pair of walks in the eighth.
"I feel like things are going in the right direction right now, just getting ahead of guys," McDonald said. "I think that's the big key to the success today."
The game was delayed 56 minutes by rain and was played in a steady drizzle as both teams hustled to avoid a rainout. The grounds crew frequently added fresh dirt to the pitcher's mound to keep it from getting muddy, though portions of the warning track were under water by the late afternoon.
"No one wants to pitch under those circumstances," catcher Ryan Doumit said. "It's hard enough to pitch as it is but with a wet mound it's even harder. For him to go out and pitch the way he's pitched just gives you a glimpse of what he's capable of."
"It was just one of those days where it was not a fun day out there, pretty much," said Houston's J.D. Martinez, who struck out three times. "When you're facing a guy like (McDonald) who's making good pitches, that rain on you all game, it's just tough to score runs, tough everything."
McDonald gave up three hits, struck out six and walked three to outduel promising rookie Henry Sosa (2-3), who sparkled in a victory over the Pirates a week ago.
Sosa wasn't hindered by the miserable conditions but the Pirates were able to do just enough to get by.
"I felt good today and I feel comfortable all the time," Sosa said. "Every game (I) feel more comfortable."
For a day, so did the 26-year-old McDonald. The right-hander's only hiccup came in the third when he walked Sosa with one out and the pitcher later scored when Jose Altuve's fly ball to deep right field skipped off Jose Tabata's glove.
It was the start of a brief but bumpy day for Tabata, who left after experiencing discomfort in his left wrist while striking out to end the third. The injury has dogged Tabata off and on recently and Hurdle said Tabata will meet with team physicians again on Tuesday.
Pittsburgh grabbed the lead for good with two runs in the fourth. Andrew McCutchen led off with an infield single and Sosa -- who needed 107 pitches to get through six innings -- drilled Lee in the ribs. Doumit doubled in McCutchen with one out and Lee came home on a single by Harrison.
"(Sosa) kind of stuck it to us last time we were in Houston so for us to go out today and get to him, it was a good win," Doumit said.
Grilli got Altuve to hit into a fielders' choice, then struck out Martinez to end the threat.
Lee provided some insurance with a drive to right off Wilton Lopez in the eighth. It was his second home run in three games since coming off the disabled list following a hand injury.
Hanrahan got some help from Houston while closing it out. The Astros had two on with one out when Matt Downs hit a soft single to center. Jimmy Paredes got caught up between second and third to take the steam out of the rally.
"You like the aggressiveness but at the same time you like to pick up that learning curve," Houston manager Brad Mills said. "Sometimes there's things you'd like to go through, and hopefully we're going through those now and we don't have to continue to go through the same things."
Houston's Carlos Lee had his 14-game hitting streak snapped when he went hitless in three at-bats. ... The series continues Tuesday. Brad Lincoln (1-1, 3.64 ERA) will start for Pittsburgh against Brett Myers (3-13, 4.81 ERA). Lincoln is 0-1 against Houston in his career, dropping a 6-2 decision at Minute Maid Park in July. Myers has dropped his last seven decisions and hasn't won since June 17. He worked two innings of relief on Friday and left the rotation briefly to be home for the birth of his fourth child. ... Schafer singled in the sixth to extend his hitting streak to a career-high seven games.