如何从Squeak和Pharo调用shell命令?这些环境中是否包含某些unix语言中的system()函数以运行外部shell命令,或者反引号(不能让它们在这里对编辑器执行操作,但是当你按下左键时会得到的内容) 1“及以上”TAB“)捕获命令的输出?
答案 0 :(得分:5)
我认为你可以使用OSProcess包来做你想要的。另外,我认为最好在squeak-dev或pharo邮件列表中询问。
答案 1 :(得分:3)
在Squeak中你可以使用CommandShell,但我不知道Pharo目前有什么(如果有的话)。
答案 2 :(得分:2)
答案 3 :(得分:1)
您有两种解决方案:
使用ProcessWrapper包。优点:快速简便的安装。缺点:功能有限,仅限win32。
使用包OSProc / CommandShell。优点:相当不错的功能(管道,环境变量,类似shell的工作空间......)和跨平台。缺点:必须使用VMMaker工具来构建外部插件。
答案 4 :(得分:0)
我正在将Windows 10与Pharo 6配合使用,发现无法使用OSProcess
或OSSubprocess
类(难以安装或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
Windows对其中的进程(环境,...)所做的大部分工作都得到了很多支持
因此,请在OSWindows目录中查找。