Вызов команд оболочки из Squeak или Pharo - PullRequest
9 голосов
/ 13 сентября 2009

Как вы можете вызывать команды оболочки из Squeak и Pharo? Есть ли в этих средах что-то вроде функции system () в определенных языках Unix для запуска внешних команд оболочки или обратных ссылок (нельзя заставить их сделать это с редактором, но то, что вы получаете, нажимая клавишу слева от " 1 "и выше" TAB ") для захвата вывода команд?

Ответы [ 6 ]

5 голосов
/ 13 сентября 2009

Я думаю, вы можете использовать пакет OSProcess, чтобы делать то, что вы хотите.Кроме того, я думаю, что лучше спросить в списке рассылки squeak-dev или pharo.

3 голосов
/ 13 сентября 2009

В Squeak вы можете использовать CommandShell , но я не знаю, что (если вообще что-нибудь) доступно для Pharo в настоящее время.

2 голосов
/ 20 сентября 2009

Поддержка оболочки в Squeak / Pharo довольно ограничена. Есть планы улучшить это; см. проект Coral . Ваш вклад приветствуется.

1 голос
/ 20 марта 2010

У вас есть два решения:

Используйте пакет ProcessWrapper. Плюсы: быстрая и простая установка. Минусы: ограниченная функциональность, только на win32.

Используйте пакет OSProcess / CommandShell. Плюсы: довольно хорошая функциональность (каналы, переменные окружения, оболочка, похожая на оболочку ...) и кроссплатформенность Минусы: необходимо использовать инструменты VMMaker для создания внешнего плагина.

0 голосов
/ 11 января 2019

В Windows для Win API имеется оболочка, позволяющая вам сделать это:

| 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

Существует большая поддержка того, что Windows может делать с процессами в ней (env, ...)

Итак, посмотрите в каталоге OSWindows.

enter image description here

0 голосов
/ 29 ноября 2018

Я использую Windows 10 с Pharo 6 и обнаружил, что невозможно использовать классы OSProcess или OSSubprocess (сложно установить или последние версии не поддерживаются для Windows).

Для меня работает LibC. Вы можете перенаправить stderr в файл, используя 2> внутри команды:

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

Можно манипулировать переменными среды, используя (хотя в Windows возвращается значение 1, означающее сбой):

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

Однако мне не удалось изменить текущий каталог:

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

Обходной путь должен сделать CD внутри команды:

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