質問

SqueakとPharoからシェルコマンドを呼び出すにはどうすればよいですか?これらの環境には、外部シェルコマンドを実行する特定のUNIX言語のsystem()関数、またはバックティック(ここではエディターに実行させることはできませんが、&quotの左キーを押したときに取得するもの) ; 1"以上" TAB")コマンドの出力をキャプチャしますか?

役に立ちましたか?

解決

Squeakでは、 CommandShell を使用できますが、何がわからないのか(もしあれば) )は現時点でPharoで利用可能です。

他のヒント

OSProcessパッケージを使用して、必要な処理を実行できると思います。さらに、squeak-devまたはpharoのメーリングリストで質問することをお勧めします。

Squeak / Pharoのシェルサポートはかなり制限されています。これを改善する計画があります。 サンゴ プロジェクト。あなたの貢献を歓迎します。

2つの解決策があります:

ProcessWrapperパッケージを使用します。長所:すばやく簡単にインストールできます。短所:制限された機能、win32のみ。

パッケージOSProcess / CommandShellを使用します。長所:かなり優れた機能(パイプ、環境変数、シェルのようなワークスペースなど)、およびクロスプラットフォーム。短所:外部プラグインをビルドするには、VMMakerツールを使用する必要があります。

Pharo 6でWindows 10を使用していますが、 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.

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ができることのほとんどをサポートしています(env、...)

だから、OSWindowsのカタログを見てください。

ここに画像の説明を入力してください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top