10

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

4

6 回答 6

5

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

于 2009-09-13T08:44:57.937 回答
3

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

于 2009-09-13T02:31:52.113 回答
2

Squeak/Pharo 对 Shell 的支持非常有限。有计划对此进行改进;参见珊瑚 项目。欢迎您的贡献。

于 2009-09-19T21:04:59.570 回答
1

你有两个解决方案:

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

使用包 OSProcess/CommandShell。优点:非常好的功能(管道、环境变量、类似 shell 的工作区......)和跨平台。缺点:必须使用 VMMaker 工具来构建外部插件。

于 2010-03-20T13:44:48.767 回答
1

在 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 

在此处输入图像描述

对于 Windows 可以对其中的进程执行的大部分操作(环境,...),有很多支持

因此,请查看 OSWindows 的目录。

在此处输入图像描述

于 2019-01-11T13:51:56.867 回答
0

我正在使用带有 Pharo 6 的 Windows 10,发现使用OSProcessorOSSubprocess类是不可行的(难以安装或 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 ]

可以使用以下方法操作环境变量(尽管它返回值 1 表示 Windows 中的失败):

   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.
于 2018-11-29T12:31:29.993 回答