Pergunta

Como você pode chamar comandos do shell do Squeak e Pharo?Fazer esses ambientes têm nada deles, como a função system() em determinados unix idiomas para executar externo comandos de shell, ou as aspas invertidas (não pode torná-los aqui fazer para o editor, mas o que você ganha quando você pressiona a tecla esquerda do "1" e, acima de "GUIA") para capturar a saída de comandos?

Foi útil?

Solução

Em squeak você pode usar Commandshell, mas não sei o que (se alguma coisa) está disponível para o Pharo neste momento.

Outras dicas

Eu acho que você pode usar o pacote Osprocess para fazer o que quiser. Além disso, acho melhor perguntar na lista de discussão Squeak-Dev ou Pharo.

O suporte da concha no Squeak/Pharo é bastante limitado. Há planos para melhorar isso; Veja o Coral projeto. Suas contribuições são bem -vindas.

Você tem duas soluções:

Use o pacote ProcessWrapper. Prós: instalação rápida e fácil. Contras: funcionalidade limitada, apenas no Win32.

Use o pacote Osprocess/Commandshell. Prós: Funcionalidade muito boa (tubos, vars de ambiente, espaço de trabalho do tipo Shell ...) e plataforma cruzada. Contras: deve usar as ferramentas VMMMAKer para criar o plug -in externo.

Eu estou usando o Windows 10 com Pharo 6, e encontrou-o inviável para o uso OSProcess ou OSSubprocess classes (disco rígido para instalar ou as versões mais recentes não são suportados para Windows).

O que funciona para mim é LibC.Você pode redirecionar stderr para um arquivo usando 2> dentro do comando:

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

É possível manipular as variáveis de ambiente usando (embora ele retorna um valor de 1 implicar uma falha no Windows):

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

No entanto, eu era incapaz de alterar o directório actual:

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

A solução é fazer o CD com o comando:

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

No Windows, há um invólucro na API WIN, permitindo que você faça isso:

| 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

Há muito suporte para a maior parte do que as janelas podem fazer com os processos lá (Env, ...)

Portanto, olhe no catálogo para oswindows.

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top