Jameson Taillon (13-9) allowed two runs and four hits in seven innings Wednesday, leaving with a 4-1 lead after the first two Cardinals reached in the eighth. He has held opponents to three earned runs or less in his last 19 starts, the second- longest streak in the NL behind New York Mets right-hander Jacob deGrom with 26.
Taillon has gone seven innings or more seven times this season and has limited opponents to two runs or fewer in all of those outings.
Jose Martinez hit into a run-scoring forceout in the eighth inning against Felipe Vazquez, who allowed Patrick Wisdom's run-scoring single in the ninth. Vazquez rebounded to strike out DeJong and Matt Carpenter with two on to end the game for his 22nd consecutive save and 32nd in 36 chances this year.
Pittsburgh has won six of eight. The Pirates won 11 in a row from July 11-24.
Daniel Poncedeleon (0-2), making his fourth start for St. Louis, allowed two runs and five hits in five innings.
Marcell Ozuna had a run-scoring single in the first for the Cardinals, but Stallings hit a sacrifice fly in the second, Jordan Luplow had a go-ahead single in the third, and Stallings boosted the lead to 4-1 with a two-run single off Mike Mayers in the sixth.
The Cardinals begin a key four-game series against the Dodgers on Thursday. St. Louis leads Los Angeles by two games for the second NL wild card. The Dodgers beat the Reds 8-1 on Wednesday.
The Cardinals are 34-19 under new manager Mike Shildt. They have the most wins in the NL after the All-Star break with 33.