I am using golang “os/exec” to call a Windows program with parameters.
If you call the program with
app.exe /param1:"0 1 2"
it returns ok
if you call the program with
app.exe "/param1:0 1 2"
it returns error
My problem is that I can’t use exec.Command to call the app correctly.
I have written a sample c# program.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Environment.CommandLine);
if (Environment.CommandLine.EndsWith("/param1:\"0 1 2\""))
{
Console.WriteLine("argument is valid");
}
else
{
Console.WriteLine("argument is invalid");
}
return;
}
}
}
here is my go code:
package main
import (
"fmt"
"os/exec"
)
func main() {
arg1 := `/param1:"0 1 2"`
fmt.Println(arg1)
data, err := exec.Command("./ConsoleApp1.exe", arg1).Output()
if err != nil {
panic(err)
}
fmt.Println(string(data))
arg1 = `"/param1:0 1 2"`
fmt.Println(arg1)
data, err = exec.Command("./ConsoleApp1.exe", arg1).Output()
if err != nil {
panic(err)
}
fmt.Println(string(data))
arg1 = `/param1:0 1 2`
fmt.Println(arg1)
data, err = exec.Command("./ConsoleApp1.exe", arg1).Output()
if err != nil {
panic(err)
}
fmt.Println(string(data))
return
}
Output is:
/param1:"0 1 2"
./ConsoleApp1.exe "/param1:\"0 1 2\""
argument is invalid
"/param1:0 1 2"
./ConsoleApp1.exe "\"/param1:0 1 2\""
argument is invalid
/param1:0 1 2
./ConsoleApp1.exe "/param1:0 1 2"
argument is invalid
Anyone can help me? Thanks.