Soto finished 3-for-4 with a pair of two-baggers, while Aramis Ramirez went 3- for-5 and scored a run for the Cubs, winners of seven of their last 10.
Rodrigo Lopez (4-3) allowed three runs -- two earned -- on five hits over 5 1/3 innings for the win. He walked two and struck out three.
Kerry Wood tossed a perfect ninth to record his first save of the season.
In his second career start, Henry Sosa (0-2) allowed four runs on seven hits and two walks while fanning six in as many frames to suffer the loss.
Matt Downs went 2-for-4 with two doubles and a pair of RBI for the Astros, who have dropped seven straight.