Frage

Wie können Sie Shell -Befehle von Squeak und Pharo aufrufen? Haben diese Umgebungen in bestimmten Unix -Sprachen irgendetwas in ihnen wie die Funktion System (), um externe Shellbefehle oder die Backticks auszuführen (kann sie hier nicht mit dem Editor tun, aber was Sie erhalten, wenn Sie die Schlüssel links drücken. " 1 "und über" Registerkarte "), um die Ausgabe von Befehlen zu erfassen?

War es hilfreich?

Lösung

In Quietschen können Sie verwenden Befehlshell, aber ich weiß nicht, was (wenn überhaupt) zu diesem Zeitpunkt für Pharo verfügbar ist.

Andere Tipps

Ich denke, Sie können das Paket OSProcess verwenden, um das zu tun, was Sie wollen. Außerdem denke ich, dass es besser ist, in Squeak-Dev oder Pharo Mailing-Liste zu fragen.

Die Shell -Unterstützung in Squeak/Pharo ist ziemlich begrenzt. Es gibt Pläne, dies zu verbessern. Siehe das Koralle Projekt. Ihre Beiträge sind willkommen.

Sie haben zwei Lösungen:

Verwenden Sie den Paketprozesswrapper. Vorteile: Schnelle und einfache Installation. Nachteile: begrenzte Funktionalität, nur auf Win32.

Verwenden Sie das Paket OsProcess/Commandshell. Vorteile: Ziemlich gute Funktionalität (Rohre, Umgebungsvars, Shell-ähnlicher Arbeitsbereich ...) und Cross-Plattform. Nachteile: Muss VMMAKER -Tools verwenden, um das externe Plugin zu erstellen.

Ich benutze Windows 10 mit Pharo 6 und fand es unmöglichkeit, die zu verwenden OSProcess oder OSSubprocess Klassen (schwer zu installieren oder die neuesten Versionen werden für Windows nicht unterstützt).

Was für mich funktioniert, ist libc. Sie können Stderr zu einer Datei mithilfe der Datei umleiten 2> Innerhalb des Befehls:

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

Es ist möglich, die Umgebungsvariablen zu manipulieren (obwohl er einen Wert von 1 zurückgibt, was ein Fehler in Windows impliziert):

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

Ich konnte das aktuelle Verzeichnis jedoch nicht ändern:

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

Die Problemumgehung besteht darin, CD innerhalb des Befehls zu machen:

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

Unter Windows befindet sich eine Wrapper auf der Win -API, mit der Sie dies tun können:

| 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 

enter image description here

Es gibt viel Unterstützung für das meiste, was Windows mit Prozessen drin machen kann (Env, ...)

Schauen Sie sich also den Katalog nach Oswindows an.

enter image description here

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top