ARLINGTON, Texas — Danny Duffy didn't need much help Thursday night. Still, he and catcher Salvador Perez got a nifty assist from Shin-Soo Choo's face.

Duffy took a shutout into the eighth inning after Perez threw out a baserunner on a ball that hit Choo in the nose, and the Kansas City Royals beat the Texas Rangers 8-2 for their season-best third straight victory.

Perez had four RBIs on a pair of two-run singles with two outs, first in the fifth and then the seventh innings. But the catcher's caught stealing in the first inning was more memorable.

Duffy's pitch in the dirt bounced off Perez and then hit Choo in the face, sending the left-handed hitter staggering out of the box. Perez scrambled to get the ball from in front of home plate, then threw out Delino DeShields trying to take second on the play.

"I saw the ball like right in front of me," Perez said. "I said, 'Bro, I think you're bleeding.'"

Choo remained in the game and drew a walk in the plate appearance.

Duffy (2-6) allowed a run and four hits, struck out five and walked two in 7 2/3 innings in his longest outing of the season. The veteran left-hander entered the game with a 6.88 ERA this season and had allowed at least five earned runs in five of his previous 10 starts.

"It was nice to do something beneficial to the team," said Duffy, who said his slider might have been his best of the season.

"He needed it," Royals manager Ned Yost said. "He was on the attack. He was throwing the ball in good spots and was ahead in the count."

Last season against Texas, Duffy allowed only one run in 15 2/3 innings. Both of Duffy's 2017 appearances vs. Texas were 1-0 Rangers wins. He got one loss and one no-decision.

"I've been throwing baseballs professionally for almost 11 years now. You notice trends that you have success against people," Duffy said.

After DeShields led off Texas' first inning with a single to right field, Duffy didn't allow another hit until Choo singled in the seventh. Rougned Odor broke up the shutout bid with a two-out single in the eighth, ending Duffy's night.

Texas' offence struggled a night after matching a season high for runs in a 12-10 win over the New York Yankees.

"(Duffy) had a good start tonight," Rangers manager Jeff Banister said. "There's not a whole lot other that you can say."

Rangers right-hander Austin Bibens-Dirkx (0-1) gave up six runs, four earned, on eight hits in 6 1/3 innings. He made his season debut for Texas after his contract was purchased from Triple-A Round Rock earlier in the day.

Ramon Torres had two hits and three runs in his first appearance of the season. He was a late lineup replacement for Alex Gordon, who had a sore hip and a stiff neck.

The Royals scored two unearned runs in the second inning after having no one on with two outs. Torres, who was recalled from Triple-A Omaha last Saturday, followed Ryan Goins' single to centre that rolled past DeShields' glove. Goins and Torres both scored on the three-base error.

Bibens-Dirkx filled the rotation spot left vacant when left-hander Matt Moore went on the 10-day disabled list Saturday with a sore right knee.

THE OLDEST GETS OLDER

Rangers right-hander Bartolo Colon, the major leagues' oldest active player, turned 45 on Thursday. His teammates honoured him with a cake before the game, and his face ended up in the cake during the celebration.

Royals closer Kelvin Herrera, from the Dominican Republic like Colon, said he had pictures of Colon on his bedroom walls when he was a teenager.

"He was my idol," Herrera said.

SHORT HOPS

To make room for Bibens-Dirkx on Texas' 40-man roster, left-hander Brandon Mann was optioned to Round Rock. Mann appeared in three games, making his major league debut on May 13, after pitching 15 years in the minors and Japan.

TRAINER'S ROOM

Royals: Gordon was injured making a diving catch during Wednesday's win at St. Louis.

UP NEXT

Royals LHP Eric Skoglund (1-4) has lost three straight. He allowed six earned runs in five innings Sunday in the New York Yankees' 10-1 win.

Rangers LHP Mike Minor (3-3), who spent last season as a Royals reliever, has also lost three straight. He gave up 14 earned runs in 15 1/3 innings in the three games.

___

More AP baseball: https://apnews.com/tag/MLBbaseball