ST. LOUIS -- The Pirates did just about everything right on Friday night. That is, except win.

Hours before Friday's first pitch, manager John Russell stressed pitching and defense. That, as he explained, would likely be the only way the Pirates would have a shot at downing Cardinals starter Chris Carpenter, whose previous 12 starts against Pittsburgh all ended in St. Louis victories.

The Pirates responded to the challenge. But with no offense to accompany it, the effort was spoiled when the Cardinals pushed across the lone run of the game in the 10th to walk off with a 1-0 win at Busch Stadium.

"The guys fought hard but just couldn't find a way to get that run to put us over the top," Russell said after a 2:36 game that was just 16 minutes longer than the rain delay that preceded it. "I was really proud of the way our guys played. They really got after it and just came up short."

It took the Cardinals a while to capitalize, but they finally did against Javier Lopez, who came in to pitch the 10th. Cardinals manager Tony La Russa countered by sending right-handed-hitting pinch-hitter Ryan Ludwick -- still only a career .238 hitter against lefties -- to the plate.

The numbers didn't matter, though, as Ludwick turned on a 2-1 slider to collect the first extra-base hit of the game.

"Looked like he hit a good pitch," La Russa said. "That was a great at-bat."

A sacrifice bunt moved Ludwick to third. Brendan Ryan then drilled a low liner toward second baseman Neil Walker, who was playing up as part of a drawn-in infield. Walker fumbled in his attempt to make a lunging stop, and Ludwick trotted home to give the Cardinals a win that put them back atop the National League Central standings.

"I didn't absolutely smash it, but I got enough on it," Ryan said. "I don't know. It worked out."

On the other end, though, the Pirates were left to mull over how such a well-played game went bad.

"A game like this, one person doesn't lose it," said catcher Erik Kratz, who threw out three St. Louis would-be basestealers. "A game like this, one person doesn't win it."

"It's just a solid game that went their way," Russell added. "It was unfortunate."

What was particularly unfortunate was that the loss wasted a brilliant start from Jeff Karstens. Well aware that he couldn't stumble in the matchup against Carpenter, Karstens matched the St. Louis ace zero for zero. In fact, he did so much more efficiently.

Just as he did against St. Louis in May, Karstens tossed six scoreless innings. He scattered seven hits and allowed only two runners to reach second base. Neither advanced any farther.

"I think the biggest thing tonight is that when they did get hits, they were singles," Karstens said. "I just try and make the hitter's aggressiveness work against them, be a little more aggressive than they normally would."

Of the 22 hitters Karstens faced, he threw a first-pitch strike to 19. There were no walks to his pitching line, and he was aided by a number of stellar defensive plays behind him.

Jose Tabata made two sliding catches in the outfield. First baseman Garrett Jones added a terrific diving stop to prevent an extra-base hit in an inning where the Cardinals ended up putting two more runners on. And for the first time this season, the Pirates threw out multiple runners trying to steal second.

Kratz became the first Pittsburgh catcher since Keith Osik in 1999 to throw out three runners in a game.

Yet, maybe most impressive of all for Karstens was that he needed only 69 pitches to finish his six frames. Of those, 50 were strikes.

"He was outstanding," Kratz said.

Karstens' night never would have ended so early if it hadn't been for the way things played out in the seventh. Hopeful to capitalize on the most promising run-scoring opportunity to that point, Russell elected to pinch-hit for Karstens with runners on first and second and one out.

The opportunity went untapped, however, as Delywn Young flied out and Kratz got picked off first base with Andrew McCutchen batting.

"I left with the best-case scenario," Karstens said. "Unfortunately, we ended up on the wrong side tonight."

The Pirates' other offensive opportunities were limited, and they never had another batter reach base after that missed seventh-inning chance. The club finished with only five singles.

Carpenter needed 116 pitches, but he ended up going eight innings deep for the third time in his four starts since the All-Star break. The right-hander also lowered his career ERA against the Pirates to 2.12.

"He threw the ball outstanding," Russell said. "So did Jeff. It's going to come down to that one play or one big hit, and they got it."