2011-10-21 10 views
3

私は学習を始めようとしています。私は、iTunesを制御するための超シンプルなWebサーバーを一緒に投げようとしました。私は過去に何度もこの目的のためにosascript -e 'Tell Application "iTunes" to playpause'を使用していました。私はここでオスカスクリプトに電話をかけてしまいました。Go Execに適切な引数を渡します

コメントアウトされた「say 5」コマンドになります。

package main 

import "exec" 
//import "os" 

func main() { 

    var command = "Tell Application 'iTunes' to playpause" 
    //var command = "say 5" 

    c := exec.Command("/usr/bin/osascript", "-e", command) 
// c.Stdin = os.Stdin 
    _, err := c.CombinedOutput() 
    println(err.String()); 


} 

次のように私はこのことから受け付けております応答がある -

[email protected] ~/Desktop/goproj » ./8.out 
exit status 1 
[55/1536]0x1087f000 

私はどこここから行くし、任意の方向をいただければ幸いです正確にはわかりません。

+0

osasc 「標準」から「標準」に変更します。あなたのAppleScriptコードが間違っている可能性があります。あなたのGoではありません。 –

答えて

5

私はそれが私が(exec.Commandを考えて、この

package main 

import (
    "fmt" 
    "exec" 
) 

func main() { 
    command := "Tell Application \"iTunes\" to playpause" 

    c := exec.Command("/usr/bin/osascript", "-e", command) 
    if err := c.Run(); err != nil { 
     fmt.Println(err.String()) 
    } 
} 

で作業してしまいました... )空白がある場合はパラメータに二重引用符を追加するので、必要なところでエスケープするだけです。

+0

あなたは私の良い先生がちょうど私の一日を作った!どうもありがとうございました! – donatJ

+0

引用符をエスケープするのは、コマンドシェルに物を入力する場合にのみ必要です。 Goは明示的にプログラムを開始し、各パラメータを個別の値として渡します。各引数(パラメータ)は、引数の配列内の独自のエントリです。個々の引数には、エスケープを伴わないスペースや引用符を含めることができます。 – Gabe

0

c := exec.Command("/usr/bin/osascript", "-e", "say 5") 
output, err := c.CombinedOutput() 

を試してみたり、エラー(もしあれば)と結合された出力を印刷するには

c := exec.Command("/usr/bin/osascript", "-e", "say 5") 
c.Stdin = os.Stdin 
output, err := c.CombinedOutput() 

を試してみてください。

if err != nil { fmt.Println(err) } 
fmt.Print(string(output)) 
+0

応答をありがとうが、私はまだ動作しませんし、終了ステータス1を返すことを恐れている [55/1536] 0x1088e000 – donatJ

+0

私の答えを更新しました。それが動作しない場合、私は問題を解決する方法を知らない。 –

+0

あなたの答えは*うまくいきました - しかし、今私は "アプリケーションにiTunesの再生を一時停止する"とその戻り値の "終了ステータス1"をもう一度伝えようとしています - 私が使っているコード例で私の古い投稿を更新しました現時点でどんな助けでも大歓迎です。 – donatJ

1

あなたはおそらくちょうど引用符が欠落しています。試してみてください。また、

var command = "\"Tell Application 'iTunes' to playpause\"" 

、代わりのprintlnの、慣用的には普通に行くには、次のようになります。

if err != nil { 
    fmt.Println(err.String()); 
} 
+0

さて、私はそれを試み、新しい1つを得た:ランタイムエラー:無効なメモリアドレスまたはnilポインタ参照解除 [signal 0xa code = 0x2 addr = 0x14 pc = 0x20a8] runtime.panic + Users/jessed/go/src/pkg/runtime/proc.c:1254 \t runtime.panic(0x33788、0x1048a3d8) – donatJ

+0

あなたはerrと回線をチャットしましたか?もしerrがnilならば、あなたはprintln – amattn

+0

oopsでパニックを起こすでしょう。上記のコメントは、チャットの代わりに "あなたは変更されました"と言わなければならない... – amattn

関連する問題