CHICAGO -- Ted Lilly went to the mound in the first inning and the wind seemed to be whipping from every direction. Mostly, it was blowing out.
"I respect that lineup, and for us to go out there and the guys to put those kind of at-bats against one of the top pitchers in the league, I certainly wanted to take advantage of an opportunity like that," Lilly said after winning his fourth straight start.
The left-hander, one of the Cubs' top offseason acquisitions, is 5-0 in his last six starts.
"He had a week off between starts and he had a nice, fresh arm," Cubs manager Lou Piniella said. "He had good velocity from the first inning until the eighth."
Lilly (9-4), who hasn't lost since June 5, gave up four hits and a run over eight innings to help Chicago win for the 14th time in 18 games. He walked one, struck out seven and added a run-scoring single in the sixth for his third major league RBI.
Lilly said his control with his fastball has been a big plus and so has his ability to limit home runs, a weakness in the past.
"I'm trying to limit the mistakes and keep the ball from out over the plate," he said. "I've tried not to think about strikeouts."
After Lilly's RBI single, Soriano followed with his homer to left, his team-leading 16th of the season, to finish Oswalt (8-6). The right-hander gave up 10 hits and a season-high nine runs in 5 1/3 innings.
"Everybody knows him. He's a very good pitcher," Soriano said. "The team, I don't think it needs a homer right now. I think it is more important how we play."
Soriano's long drive with the wind blowing out at 15 mph was the first homer for the Cubs since June 29, a stretch of 365 at-bats. Ramirez had a two-run double in the fourth and a two-run single in the fifth.
After Oswalt retired his first 10 batters, Cesar Izturis singled in the fourth but held at third when Derrek Lee doubled to right. Ramirez followed with a drive to right-center that got stuck in the ivy for a ground-rule double, putting the Cubs ahead 2-1.
One out later, Houston's defense made another error -- the Astros had four on Friday -- when catcher Brad Ausmus picked up Mark DeRosa's roller to the left of the plate and threw it past first, allowing Ramirez to score.
Oswalt, who is 10-10 against the Cubs in his career with four straight losses, said a call on a pitch to Izturis in the fourth seemed to throw him off.
"The first three innings went pretty well and then a questionable call on a (potential) third strike on Izturis and I kind of just let that get to me a little too much," Oswalt said. "He swung at the ball and the guy said he tipped it. But the ball was so far away from him that he couldn't reach it with his bat. It kind of threw the whole inning off. It would have been two outs with nobody on."
Instead, Oswalt said, he had to pitch from the stretch instead of the windup, and Lee and Ramirez delivered doubles.
Oswalt got the first two hitters in the fifth but gave up a single to Soriano before walking Izturis and Lee to load the bases. Ramirez singled to left for a 5-1 lead.
"The fourth, fifth and sixth innings were not like Roy Oswalt at all," Astros manager Phil Garner said. "It didn't look like he pitched bad. We just couldn't get out of innings without giving up runs."
Houston scored early when leadoff hitter Chris Burke blooped a ball to right that Cubs right fielder Cliff Floyd dove for and missed, hurting his left shoulder. The ball got behind Floyd and went for a triple. Hunter Pence's RBI grounder made it 1-0.
Floyd had to leave the game with a shoulder strain after one inning. The Cubs switched DeRosa to right and brought in Mike Fontenot to play second base.
- Burke started at second base for the Astros. Garner said before the game that Craig Biggio's playing time could be reduced as the team gives Burke a longer look. Biggio pinch-hit in the eighth and was robbed of a hit by Jacque Jones' diving catch, although TV replays appeared to show the ball was trapped.
- The most runs Oswalt has given up in a game is 10 against the Cardinals in 2003.