从Squeak或Pharo调用shell命令

时间:2009-09-13 01:40:10

标签: smalltalk squeak pharo

如何从Squeak和Pharo调用shell命令?这些环境中是否包含某些unix语言中的system()函数以运行外部shell命令,或者反引号(不能让它们在这里对编辑器执行操作,但是当你按下左键时会得到的内容) 1“及以上”TAB“)捕获命令的输出?

6 个答案:

答案 0 :(得分:5)

我认为你可以使用OSProcess包来做你想要的。另外,我认为最好在squeak-dev或pharo邮件列表中询问。

答案 1 :(得分:3)

在Squeak中你可以使用CommandShell,但我不知道Pharo目前有什么(如果有的话)。

答案 2 :(得分:2)

Squeak / Pharo的壳牌支持非常有限。有计划改善这一点;请参阅Coral project。欢迎您的贡献。

答案 3 :(得分:1)

您有两种解决方案:

使用ProcessWrapper包。优点:快速简便的安装。缺点:功能有限,仅限win32。

使用包OSProc / CommandShell。优点:相当不错的功能(管道,环境变量,类似shell的工作空间......)和跨平台。缺点:必须使用VMMaker工具来构建外部插件。

答案 4 :(得分:0)

我正在将Windows 10与Pharo 6配合使用,发现无法使用OSProcessOSSubprocess类(难以安装或Windows不支持最新版本)。

对我有用的是LibC。您可以在命令内使用2>将stderr重定向到文件:

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.

答案 5 :(得分:0)

在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对其中的进程(环境,...)所做的大部分工作都得到了很多支持

因此,请在OSWindows目录中查找。

enter image description here