Как запустить команду dir с помощью golang? - PullRequest
0 голосов
/ 10 октября 2018

Вот мой код:

package main

import (
    "bytes"
    "fmt"
    "io"
    "os/exec"
)

func runCommand(command string) io.Writer{
    cmdName := "cmd.exe"
    cmdArgs := []string{"/c", command}
    fmt.Println("Running command: " + command)
    cmd := exec.Command(cmdName, cmdArgs...)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    cmd.Run()
    return cmd.Stdout

}
func main(){
    fmt.Println(runCommand("dir"))  // Prints the output of dir for the current directory
    fmt.Println(runCommand("dir C:\\")) // Prints nothing
    fmt.Println(runCommand("dir C:\\Users\\"))  //Prints the output of dir for the users directory
    fmt.Println(runCommand("dir C:\\..\\"))  // Prints the output of dir for the C drive (What I want)
}

Я ожидаю, что когда я выполню dir C: \ , я получу вывод, как если бы я работал в Windowsкомандная строкаВместо этого я ничего не получаю.Интересно, что любой другой путь при запуске dir работает просто отлично.Я даже вижу C: \ Если я вместо этого выполню C: \ .. \ Почему это так?Я не понимаю, почему это происходит, и любая другая команда Windows, которую я дал, работает нормально.

1 Ответ

0 голосов
/ 10 октября 2018

Прежде всего, никогда не игнорируйте ошибки.Вызов cmd.Run() возвращает ошибку, вы всегда должны ее проверить:

if err := cmd.Run(); err != nil {
    fmt.Printf(os.Stderr, "%v", err)
}

Попробуйте, и вы увидите, почему ваша команда терпит неудачу.

Не зная ошибки, это сложночтобы исправить вашу проблему, но я думаю, вам нужно разбить строку command на несколько полей и добавить их к cmdArgs.При запуске runCommand("dir C:\\") ваш cmdArgs на самом деле []string{"/c", "dir C:\\"), я думаю, что это должно быть []string{"/c", "dir", "C:\\"}.Взгляните на функцию strings.Split(string, string), она может вам помочь.Но это всего лишь предположение, нам нужно знать точное сообщение об ошибке, которое вы имеете для правильного решения:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...