web-dev-qa-db-fra.com

Comment faire le module de désinstallation de Krush sans confirmation

Je veux créer une commande de drush qui réinstallent certains modules. J'ai fait quelque chose comme ça:

  $modules_to_uninstall = array("my_module1", "my_module2", "my_module3", "my_module4", "my_module5");
  foreach($modules_to_uninstall as $name){
    $args = array_merge(array('pm-uninstall') ,array($name));
    call_user_func_array('drush_invoke', $args);
  }

mais, quand j'exécute la commande dans Through, cela me demande toujours si je veux désinstaller ce module.

The following modules will be uninstalled: my_module1
Do you really want to continue? (y/n): y
my_module1 was successfully uninstalled.                                                                                                                                                                     [ok]
The following modules will be uninstalled: my_module2
Do you really want to continue? (y/n): y
my_module2 was successfully uninstalled.

[OK] Les modules suivants seront désinstallés: my_module2 Voulez-vous vraiment continuer? (Y/N): Y My_Module3 a été désinstallé avec succès. ....

$modules_to_uninstall = array("-y my_module1", "my_module2", "my_module3", "my_module4", "my_module5");
  foreach($modules_to_uninstall as $name){
    $args = array_merge(array('pm-uninstall') ,array($name));
    call_user_func_array('drush_invoke', $args);
  }

J'ai essayé ceux mais c'est inutile.

Une suggestion?

5
vtemian

Pour des opérations simples telles que ceci, appelez le script Drush avec l'option -y, comme suggéré dans l'autre réponse, est la meilleure option. Si vous devez appeler PHP à partir de PHP, la meilleure API à utiliser est drush_invoke_process.

$site = array('root' => '/path/to/drupal/root', 'uri' => 'mysite.com');
$modules_to_uninstall = array("my_module1", "my_module2", "my_module3", "my_module4", "my_module5");
$result = drush_invoke_process($site, 'pm-uninstall', $modules_to_uninstall, array('yes' => TRUE));

Si vous exécutez déjà le code ci-dessus dans un environnement de site bootstraduit (appelé via drush @site php-eval ... ou drush @site php-script ...), alors vous pouvez utiliser "@Self" pour $ sur site. Notez que l'option - oui est affichée à des fins d'illustration (comment passer des options); --Oui est le mode par défaut pour drush_invoke_process.

Utilisation de Drush_Invoke_Process vous permettra d'exécuter des sous-commandes qui ne vous invitent pas sans répondre automatiquement toutes les questions de votre script. Par défaut, le code que vous appelez s'exécute en mode 'Intégrate', ce qui signifie que l'utilisateur verra tous les messages du journal et les statuts d'erreur de la sous-processus seront également définis dans le processus d'appel. Pour permettre à votre script de gérer les erreurs lui-même et que le sous-processus fonctionne tranquillement, puis désactivez l'intégration du mode:

$result = drush_invoke_process($site, 'pm-uninstall', $modules_to_uninstall, array('yes' => TRUE), array('integrate' => FALSE));

Enfin, si vous DO Vous voulez que votre sous-processus soit invité, vous pouvez appeler drush_invoke, comme vous le souhaitez dans votre question (fonctionne avec toutes les options et l'environnement du script d'appel) ou utilisez Drush_invoke_process in '. Mode interactif pour isoler l'environnement (transmettre de nouvelles options) de la sous-processus.

$result = drush_invoke_process($site, 'pm-uninstall', $modules_to_uninstall, array(), array('interactive' => TRUE));
3
greg_1_anderson