South Africa lost both openers but were still 230 runs ahead of Bangladesh at the close on the third day of the first Test when bad light stopped play on Saturday.
The home side will resume the fourth day on 54 for two after dismissing Bangladesh for 320 shortly after tea.
Dean Elgar and Aiden Markram, who scored 296 runs between them in the first innings, were out early in the second but the home side were still firmly in command with Hashim Amla (17) and Temba Bamuva on three at the crease at stumps.
Bangladesh started the day on 127-3 with Mominul Haque going on to score 77 and Mahmudullah making 66 before playing on to a rising delivery from Morne Morkel and seeing his stumps tumble over.
The pair helped Bangladesh to avoid the follow-up but soon after reaching the target the visitors collapsed with their last five wickets going down for a paltry 28 runs.
Keshav Maharaj returned the best bowling figures of 3-92 with two wickets each for South African seamers Kagiso Rabada and Morkel on a flat track that has been batsman-friendly in a high-scoring game.
South Africa scored 496 for three declared in their first innings, according to Reuters.