Faits :
A.
Z._ Sàrl était locataire de locaux commerciaux destinés à une activité de restauration dans un immeuble appartenant à A.X._ et B.X._. Son bail a été résilié par les bailleurs le 1er mars 2013 avec effet au 30 avril 2013, au motif d'un manquement grave à son devoir de diligence au sens de l'<ref-law>.
Par jugement du 17 février 2016, le Tribunal des baux du canton de Vaud a prononcé que la résiliation est valable, a donné ordre à la locataire de quitter immédiatement et de rendre libres de tout objet et de tout occupant les locaux et, à défaut de départ volontaire de celle-ci dans un délai de 30 jours dès jugement définitif et exécutoire, a d'ores et déjà chargé l'huissier du tribunal de procéder à l'exécution forcée sur requête des bailleurs, avec au besoin l'ouverture forcée des locaux, et a donné ordre aux agents de la force publique de concourir à l'exécution forcée sur requête de l'huissier.
Ce jugement a été confirmé par arrêt de la Cour d'appel civile du Tribunal cantonal du canton de Vaud du 29 janvier 2018. Le Tribunal fédéral, qui avait accordé l'effet suspensif au recours en matière civile interjeté par la locataire, a rejeté celui-ci le 24 octobre 2018 (arrêt 4A_259/2018). Puis, le 28 février 2019, il a déclaré irrecevable la demande de révision déposée par la locataire contre son arrêt du 24 octobre 2018 (arrêt 4F_2/2019).
B.
La locataire n'ayant pas libéré de son propre chef les locaux dans le délai fixé, les bailleurs ont requis, le 26 novembre 2018, qu'il soit procédé à l'expulsion forcée de la locataire.
Les cinq entreprises qui ont démonté et évacué les installations, ainsi que l'huissier pour son intervention, ont facturé leurs services. Le montant total s'élève à 20'748 fr. 95.
Par prononcé du 5 septembre 2019, le Président du Tribunal des baux a mis les frais d'exécution forcée de 20'748 fr. à la charge de la locataire récalcitrante et a condamné celle-ci à les rembourser aux bailleurs qui en avaient fait l'avance. Il l'a en outre condamnée à
verser aux bailleurs, créanciers solidaires, une indemnité de 3'877 fr. 20 à titre de dépens.
Statuant sur le recours interjeté par l'expulsée le 16 octobre 2019, la Chambre des recours civile du tribunal cantonal du canton de Vaud l'a rejeté et a confirmé le prononcé du premier juge, puis elle a mis les frais judiciaires de deuxième instance par 550 fr. à la charge de l'expulsée.
C.
Contre cette décision, l'expulsée a interjeté un recours en matière civile au Tribunal fédéral le 25 novembre 2019, concluant à sa réforme en ce sens que les frais d'exécution forcée litigieux soient mis à la charge des bailleurs ou soient mis également en partie à la charge du canton et qu'elle ne soit pas condamnée à payer l'indemnité de dépens aux bailleurs. Elle fait valoir deux griefs: premièrement, elle se plaint de constatation manifestement inexacte des faits et de violation de son droit à une décision motivée; deuxièmement, elle invoque la violation des <ref-law>.
Les bailleurs et la cour cantonale n'ont pas été invités à se déterminer.

Considérant en droit :
1.
La décision séparée sur les frais de l'expulsion forcée de la locataire récalcitrante, laquelle avait déjà été ordonnée par un jugement au fond assorti de mesures d'exécution forcée (<ref-law>), devenu définitif et exécutoire à la suite du rejet du recours de la locataire par le Tribunal fédéral, est une décision additionnelle à ce précédent jugement. Il y a donc lieu d'admettre qu'elle partage la nature de ce précédent jugement et que la valeur litigieuse est celle de la cause au fond restée litigieuse alors devant la cour cantonale.
Interjeté en temps utile (<ref-law>) par la locataire qui a succombé dans ses conclusions libératoires (<ref-law>), contre une décision finale (<ref-law>), rendue sur recours par l'autorité cantonale supérieure (<ref-law>), dans une affaire de bail dont la valeur litigieuse dépasse le seuil de 15'000 fr. (<ref-law>), le recours en matière civile est recevable.
2.
Premièrement, examinant le premier grief présenté par la locataire, la cour cantonale a considéré, en substance, que celle-ci n'avait pas démontré d'arbitraire dans l'établissement des faits et qu'elle ne pouvait pas valablement contester qu'elle n'avait pas évacué les locaux à satisfaction de droit avant le début de la procédure d'exécution forcée. La conséquence de cette inexécution de sa part justifiait donc que les frais d'exécution forcée soient mis à sa charge.
Bien qu'elle se plaigne de constatation manifestement inexacte des faits, l'expulsée recourante admet qu' " il n'est pas contestable que les locaux litigieux n'étaient pas entièrement libérés " au 6 décembre 2018, même s' " ils l'étaient tout de même en grande partie ". Il en découle qu'elle ne saurait reprocher à la cour cantonale d'avoir constaté qu'elle ne pouvait valablement contester qu'elle " n'avait pas évacué les locaux à satisfaction de droit avant le début de la procédure d'exécution forcée ". Le fait ainsi constaté est à lui seul suffisant pour statuer sur la question litigieuse, puisque la recourante ne conteste ni l'évacuation des installations faite par ces entreprises tierces, ni le montant des frais facturés.
Tous les autres éléments de fait en relation avec le déroulement de la procédure d'exécution forcée que la recourante discute - de surcroît de manière appellatoire - ne sont pas pertinents, de sorte que ses critiques sont irrecevables. Passé le délai de 30 jours dès jugement définitif et exécutoire, la recourante ne saurait reprocher à l'autorité de procéder sans retard à l'exécution forcée. Le déroulement de la procédure d'exécution forcée est du seul ressort du juge. La locataire ne dispose d'aucun droit à dicter le rythme de cette exécution. En aucun cas elle ne peut valablement objecter que, si on l'avait laissée faire, " après le délai d'exécution de 30 jours ", elle aurait poursuivi l'évacuation jusqu'au bout à moindres frais.
Certes, la cour cantonale a constaté que le premier juge n'avait ignoré aucune des objections soulevées par la recourante, sans plus de précision. Cette constatation n'était pourtant pas nécessaire pour l'application du droit. En tant que la recourante se plaint de motivation trop sommaire (art. 29 al. 2 Cst.) sur ces autres éléments non pertinents, son grief est irrecevable.
3.
Examinant le second grief de la recourante, tiré de la violation des art. 107 et 108 CPC, la cour cantonale a jugé que ce sont les carences de la locataire qui sont à l'origine de la procédure d'exécution forcée et qu'il n'existe aucune circonstance justifiant que les frais soient mis en équité à la charge d'une autre partie que la recourante.
Dans la mesure où la recourante se base sur un état de fait différent de celui retenu sans arbitraire par la cour cantonale ( cf. consid. 2 ci-dessus), son grief de violation des <ref-law> (répartition en équité) et 108 CPC (frais à la charge de la partie qui les a causés inutilement) ne peut qu'être rejeté. Faute pour la locataire d'avoir procédé à l'évacuation des installations dans le délai fixé judiciairement, les frais de l'exécution forcée doivent être mis à sa charge, conformément à l'<ref-law> (sur la nature des frais d'expulsion, cf. DAVID LACHAT/ XAVIER RUBLI, Le bail à loyer, éd. 2019, p. 1053 n. 7.8; DAVID LACHAT/ BORIS LACHAT, Procédure civile en matière de baux et loyers, éd. 2019, p. 319 n. 3.8; FRANÇOIS BOHNET/PHILIPPE CONOD, La fin du bail et l'expulsion du locataire, in 18e Séminaire sur le droit du bail, 2014, p. 136-137 n. 227).
4.
Au vu de ce qui précède, le recours doit être rejeté dans la mesure où il est recevable, aux frais de son auteure (<ref-law>). Les intimés n'ayant pas été invités à se déterminer, il n'y a pas lieu de leur allouer des dépens.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3.
Le présent arrêt est communiqué aux parties et au Tribunal cantonal du canton de Vaud, Chambre des recours civile.
Lausanne, le 29 avril 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
Le greffier : Thélin