KANSAS CITY, Mo. -- James Shields still can't get a win, but the Kansas City Royals still won their third straight for the first time since May 1-5.
Billy Butler and David Lough doubled home runs in the eighth and Salvador Perez hit a two-run homer as the Royals defeated the Houston Astros 4-2 on Friday night.
Those runs came too late for Shields to pick up his first win since April 30. He is 0-4 with three no-decisions in his past seven starts.
Shields lowered his ERA to 2.81, but has only two victories in 13 starts.
"We'll get him number three," Butler said. "It's got to change sometime, right?"
The Astros, who had their leadoff hitter reach base the first four innings, went 1-for-9 with runners in scoring position in those frames while stranding five runners. Marwin Gonzalez grounded into double plays to end the second and fourth innings with a runner on third base.
"Good pitchers make good pitches when their backs are against the wall," said Astros starter Jordan Lyles, who matched Shields for seven innings. "James Shields has been doing that for a while now."
Butler's double down the third-base line off Josh Fields, the third Astros pitcher, scored Eric Hosmer, who started the eighth with a single, for the go-ahead run. Lough's two-out double scored Elliot Johnson, who ran for Butler.
"That was real tough to drop a game like that," Fields said. "It's my job to hold the game right there and I wasn't quite as fine as I needed to be. It's pretty tough especially with Lyles throwing like he did to give that up for him. Lyles pitched a great game.
"I threw it where I wanted to go to Butler, but the ball cut on me a little bit back over the plate. When that happened, he put a good swing on it and he was able to get it right down the line. He is a pretty good hitter."
Perez hit a two-run homer in the fourth for his first home run since April 27.
Kelvin Herrera, who was recalled Tuesday from Class AAA Omaha, worked a perfect eighth for the victory. Wesley Wright was charged with the loss, giving up the single to Hosmer, the only batter he faced.
The loss snapped the Astros' six-game road winning streak, which was their longest since 2005.
Shields left after seven innings and 111 pitches, allowing two runs on nine hits and three walks while striking out six.
"Today was a grind day," Shields said. "I was in trouble every inning but one. The defense made great plays, got a couple of huge double plays. I'll try not to do that next time (put the leadoff hitter on). When they get the leadoff hitter on base you've got to make your pitches."
The Astros tied the score at 2-2 in the seventh when Jason Castro's two-out double scored Gonzalez.
Astros 22-year-old right-hander Lyles held the Royals to two runs on six hits while walking one and striking out three.
Greg Holland worked a flawless ninth to log his 11th save in 13 chances.
Perez homered with Hosmer aboard in the fourth to give the Royals a 2-1 lead. After Hosmer's infield single for the first Royals hit, Perez drove Lyles' next pitch out to left.
"I'm not happy with the pitch I threw Perez," Lyles said. "I think he was looking for something inside like I showed him in the first at-bat. I was trying to show him something further off. He put a good swing on it, so the credit goes to him. I was trying to go in and get him to roll over for a double play and I think it caught a little of the plate and it was up.
"But for the most part, I threw the ball down in the zone and got some quick outs with the ground balls. For the most part, it was alright. You can't get too down about seven innings."
The Astros seized a 1-0 lead in the third when Trevor Crowe's triple scored Brandon Barnes, who led off the inning with a single. With Crowe at third and none out, Shields struck out the next three Astros.
"It's always tough when you have a veteran guy like that and don't capitalize on it," Astros manager Bo Porter said. "To push those runs across the outcome would have probably been different."
NOTES: Astros 2B Jose Altuve, who has an eight-game hitting streak, missed his second straight game with groin discomfort. ... Royals RHP Felipe Paulino, who had Tommy John surgery last year, will begin a minor-league rehab assignment Tuesday with Double-A Northwest Arkansas. ... Northwestern RHP Luke Farrell, the son of Boston manager John Farrell, was the Royals' sixth-round pick. ... RHP Ervin Santana, who starts Saturday, has the lowest run support in the American League. The Royals are averaging 2.68 runs per nine innings in his 11 starts.