英文:
Properly pass arguments to Go Exec
问题
我正在尝试学习Go语言,作为一个开始,我想尝试编写一个非常简单的用于控制我的iTunes的Web服务器。我过去经常使用osascript -e 'Tell Application "iTunes" to playpause'
来实现这个目的,我以为我可以简单地将这个调用传递给osascript。
被注释掉的“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());
}
我收到的响应如下 -
jessed@JesseDonat-MBP ~/Desktop/goproj » ./8.out
exit status 1
[55/1536]0x1087f000
我不太确定接下来该怎么做,任何指导将不胜感激。
英文:
I'm trying to learn go and as a start I wanted to try to throw together a super simple web server for controlling my iTunes. I've used osascript -e 'Tell Application "iTunes" to playpause'
to this purpose many times in the past and thought I could simply sluff the call off to osascript here.
The commented out "say 5" command does work.
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());
}
The response I am receiving from this is as follows -
jessed@JesseDonat-MBP ~/Desktop/goproj » ./8.out
exit status 1
[55/1536]0x1087f000
I'm not exactly sure where to go from here and any direction would be greatly appreciated.
答案1
得分: 8
我用以下代码使其工作:
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(...)会在其周围添加双引号,所以你只需要在需要的地方转义 "。
英文:
I got it working with this
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())
}
}
I think exec.Command(...) adds double quotes to the parameters if there is spaces in them, so you only need to escape " where you need them.
答案2
得分: 1
你可能只是缺少引号。试试这样写:
var command = "\"Tell Application 'iTunes' to playpause\""
另外,Go语言的惯用写法通常是这样的:
if err != nil {
fmt.Println(err.String())
}
英文:
Your are probably just missing quotes. Try:
var command = "\"Tell Application 'iTunes' to playpause\""
Also, instead of println, idiomatic go usually looks like:
if err != nil {
fmt.Println(err.String());
}
答案3
得分: 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))
英文:
Try
c := exec.Command("/usr/bin/osascript", "-e", "say 5")
output, err := c.CombinedOutput()
or try
c := exec.Command("/usr/bin/osascript", "-e", "say 5")
c.Stdin = os.Stdin
output, err := c.CombinedOutput()
To print the error (if any) and the combined output:
if err != nil { fmt.Println(err) }
fmt.Print(string(output))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论