Question

Comment pouvez-vous appeler des commandes shell de Squeak et Pharo? Ces environnements ont-ils quelque chose en eux, comme la fonction system () de certains langages Unix pour exécuter des commandes de shell externes, ou les backticks (vous ne pouvez pas les faire faire ici à l'éditeur, mais ce que vous obtenez en appuyant sur la touche gauche de " ; 1 "et plus" "TAB") pour capturer le résultat des commandes?

Était-ce utile?

La solution

Dans Squeak, vous pouvez utiliser CommandShell , mais je ne sais pas quoi (le cas échéant). ) est actuellement disponible pour Pharo.

Autres conseils

Je pense que vous pouvez utiliser le package OSProcess pour faire ce que vous voulez. En outre, je pense qu'il est préférable de demander dans la liste de diffusion squeak-dev ou pharo.

Le support de Shell dans Squeak / Pharo est plutôt limité. Il est prévu d’améliorer cette situation; voir le Coral projet . Vos contributions sont les bienvenues.

Vous avez deux solutions:

Utilisez le package ProcessWrapper. Avantages: installation rapide et facile. Inconvénients: fonctionnalités limitées, uniquement sur win32.

Utilisez le package OSProcess / CommandShell. Avantages: fonctionnalités plutôt bonnes (pipes, environnement, espace de travail en forme de shell, etc.) et multi-plateformes. Inconvénients: utiliser les outils VMMaker pour créer le plug-in externe.

J'utilise Windows 10 avec Pharo 6 et j'ai trouvé impossible d'utiliser les classes OSProcess ou OSSubprocess (difficiles à installer ou les dernières versions ne sont pas prises en charge. Windows).

Ce qui fonctionne pour moi, c'est LibC. Vous pouvez rediriger stderr vers un fichier en utilisant 2 > dans la commande:

errors := '/tmp/errors.txt'.
result := LibC uniqueInstance system: 
    'echo "Hello World" > /tmp/hello.txt 2>', errors.
result = 0 ifFalse: [ errors asFileReference ]

Il est possible de manipuler les variables d'environnement à l'aide de (bien qu'il renvoie une valeur de 1 impliquant un échec sous Windows):

   OSEnvironment current setEnv: 'MY_ENVIRONMENT_VARIABLE' value: '1'.

Cependant, je n'ai pas pu modifier le répertoire actuel:

OSEnvironment current changeDirectoryTo: myDirectory asFileReference. "--> doesNotUnderstand for Windows"

La solution consiste à créer un CD dans la commande:

result := LibC uniqueInstance system: 
    'cd ', myDirectory, ' && ls > /tmp/output.txt 2>', errors.

Sous Windows, un API sur l’API Win vous permet de faire ceci:

| sqlPlusExe sqlPlusRunInDir scriptPathString| 

scriptPathString := (FileLocator imageDirectory / 'data' / 'sqlplus' / 'testquit.sql') pathString.

sqlPlusExe :='C:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe /nolog @' , scriptPathString.
sqlPlusRunInDir := 'C:\oraclexe\app\oracle\product\11.2.0\server\bin'.

sqlPlusWinProcessInformation := WinProcess 
        createAndWaitForProcess: sqlPlusExe 
        withCurrentDirectory: sqlPlusRunInDir 

 entrer la description de l'image ici

Il existe beaucoup de support pour la plupart de ce que Windows peut faire avec les processus qu'il contient (env, ...)

Alors, cherchez dans OSWindows dans le catalogue.

 entrer la description de l'image ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top