系统相关
首页 > 系统相关> > linux – 可以在Pharo smalltalk中编写shell命令吗?

linux – 可以在Pharo smalltalk中编写shell命令吗?

作者:互联网

和其他编程语言一样,有没有办法在Pharo smalltalk或简单脚本中运行linux shell命令?我想让我的Pharo映像运行一个脚本,该脚本应该能够自动执行任务并将其返回到某个值.我看了几乎所有的文档,我找不到任何相关的东西.也许它不允许这样的功能.

解决方法:

Pharo确实允许操作系统交互.在我看来,最好的方法是使用OSProcess(已建议使用MartinW).

那些认为它是重复的人缺少这一部分:

… running a script that should be able to automate a tasks and
return it to some value…

invoking shell commands from squeak or pharo中的返回值没有任何内容

要获得返回值,您可以通过以下方式执行此操作:

command := OSProcess waitForCommand: 'ls -la'.
command exitStatus.

如果你打印出上面的代码,你很可能会成功获得0.

如果你做了一个明显的错误:

command := OSProcess waitForCommand: 'ls -la /dir-does-not-exists'.
command exitStatus.

在我的情况下,你将获得〜= 0的值512.

编辑添加更多详细信息以涵盖更多内容

我同意eMBee的一份声明

return it to some value

相当含糊.我正在添加有关I / O的信息.

您可能知道有三种基本IO:stdin,stdout和stderr.这些你需要与shell进行交互.我先添加这些示例,然后再回到您的描述中.

它们中的每一个都由Pharo中的AttachableFileStream实例表示.对于上面的命令,您将获得initialStdIn(stdin),initialStdOut(stdout),initialStdError(stderr).

从Pharo写入终端:

> stdout和stderr(你将字符串串流到终端)

| process |

process := OSProcess thisOSProcess.
process stdOut nextPutAll: 'stdout: All your base belong to us'; nextPut: Character lf.
process stdErr nextPutAll: 'stderr: All your base belong to us'; nextPut: Character lf.

检查你的shell你应该看到那里的输出.

> stdin – 得到你输入的内容

| userInput handle fetchUserInput |

userInput := OSProcess thisOSProcess stdIn.
handle := userInput ioHandle.
"You need this in order to use terminal -> add stdion"
OSProcess accessor setNonBlocking: handle.
fetchUserInput := OS2Process thisOSProcess stdIn next.
"Set blocking back to the handle"
OSProcess accessor setBlocking: handle.
"Gets you one input character"
fetchUserInput inspect.

如果你想从命令中获取输出到Pharo,一个合理的方法是使用PipeableOSProcess,从他的名字可以看出,它可以与管道一起使用.

简单的例子:

| commandOutput |

commandOutput := (PipeableOSProcess command: 'ls -la') output.
commandOutput inspect.

更复杂的例子:

| commandOutput |

commandOutput := ((PipeableOSProcess command: 'ps -ef') | 'grep pharo') outputAndError.
commandOutput inspect.

由于拼写错误,我喜欢使用outputAndError.如果您的命令不正确,您将收到错误消息:

| commandOutput |

commandOutput := ((PipeableOSProcess command: 'ps -ef') | 'grep pharo' | 'cot') outputAndError.
commandOutput  inspect.

在这种情况下’/ bin / sh:cot:command not found’

就是这样.

标签:linux,shell,smalltalk,pharo,pharo-5
来源: https://codeday.me/bug/20190727/1549567.html