Domanda

Come si possono invocare i comandi di shell da Squeak e Pharo? Questi ambienti hanno qualcosa al loro interno come la funzione system () in alcuni linguaggi unix per eseguire comandi shell esterni, o i backtick (non possono farli qui fare all'editor, ma cosa ottieni quando premi il tasto a sinistra di " ; 1 "e sopra" TAB "per catturare l'output dei comandi?

È stato utile?

Soluzione

In Squeak puoi usare CommandShell , ma non so cosa (se non altro ) è disponibile per Pharo in questo momento.

Altri suggerimenti

Penso che tu possa usare il pacchetto OSProcess per fare quello che vuoi. Inoltre, penso che sia meglio chiedere nella mailing list di squeak-dev o pharo.

Il supporto della shell in Squeak / Pharo è piuttosto limitato. Ci sono piani per migliorarlo; vedi Coral progetto . I tuoi contributi sono benvenuti.

Hai due soluzioni:

Utilizza il pacchetto ProcessWrapper. Pro: installazione semplice e veloce. Contro: funzionalità limitata, solo su win32.

Utilizza il pacchetto OSProcess / CommandShell. Pro: funzionalità abbastanza buone (pipe, varianti di ambiente, area di lavoro simile a una shell ...) e multipiattaforma. Contro: è necessario utilizzare gli strumenti VMMaker per creare il plug-in esterno.

Sto usando Windows 10 con Pharo 6 e ho trovato impossibile usare le classi OSProcess o OSSubprocess (difficile da installare o le versioni più recenti non sono supportate per Windows).

Ciò che funziona per me è LibC. Puoi reindirizzare stderr a un file usando 2 > all'interno del comando:

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

È possibile manipolare le variabili di ambiente usando (anche se restituisce un valore di 1 che implica un errore in Windows):

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

Tuttavia, non sono stato in grado di cambiare la directory corrente:

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

Per risolvere il problema, fare il CD con il comando:

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

Su Windows, c'è un wrapper nell'API Win che ti consente di farlo:

| 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 

 inserisci qui la descrizione dell'immagine

Ci sono molti supporti per la maggior parte di ciò che Windows può fare con i processi (env, ...)

Quindi, cerca nel catalogo OSWindows.

 inserisci qui la descrizione dell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top