2011-10-21 25 views
3

我试图去学习,并作为一个开始,我想尝试抛出一个超级简单的Web服务器来控制我的iTunes。我过去曾多次使用osascript -e 'Tell Application "iTunes" to playpause'这个目的,并认为我可以在这里简单地将呼叫拒绝给osascript。正确地将参数传递给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 ript'到'stderr'。这可能是你的AppleScript代码有问题,而不是你的Go。 –

回答

5

我得到了它这个

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()) 
    } 
} 

我觉得exec.Command(工作... )如果参数中有空格,则会向参数添加双引号,所以您只需在\“您需要它们的地方”转义。“

+0

你我的好先生刚刚度过我的一天!非常感谢你! – donatJ

+0

转义引号只有在您将东西输入到命令shell时才需要。 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

我更新了我的答案。如果它不起作用,我不知道如何解决这个问题。 – 2011-10-21 16:06:33

+0

您的答案*做了*工作 - 但现在我试图通过“告诉应用程序”iTunes“playpause”并再次返回'退出状态1' - 我已更新我的旧帖子,并使用了我正在使用的代码示例目前。任何帮助将不胜感激。 – donatJ

1

你很可能只是缺少引号。尝试:

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

另外,代替的println,习惯平时去的样子:

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

那么我想,并得到一个新的 - 恐慌:运行时错误:无效的内存地址或零指针引用 [信号是0xA代码= 0×2 ADDR = 0×14 PC = 0x20a8] runtime.panic + 0x92 /用户/ jessed/go/src/pkg/runtime/proc.c:1254 \t runtime.panic(0x33788,0x1048a3d8) – donatJ

+0

您是否与err聊天?如果err为零,那么println – amattn

+0

oops会导致恐慌。上面的评论应该说“你改变了”而不是聊天... – amattn