GolangプログラムからWindowsコマンドを実行するための既存の解決策を見てきましたが、どれもうまくいきません。私の目的は.png
、goプログラムからファイルを開くことです。
以下はサンプルプログラムです。画像ファイルは開きません。私はdir
テストのために試してみています。
package main
import (
"log"
"os"
"os/exec"
"runtime"
)
func main() {
cmd := exec.Command("ls", "-lah")
if runtime.GOOS == "windows" {
cmd = exec.Command("cmd", "dir")
}
cmd.Stdout = os.Stdout
err := cmd.Run()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
}
cmd = exec.Command("dir")
13行目も試してみました。プログラムはエラーや出力なしで存在します。エラーが表示されないため、実行は成功したようです。いくつかのバリエーションを試しましたが、成功しませんでした。
私はVSCodeを使用していますとしてこのプログラムを実行しようとしたビルトインcmd
とwsl
VSCodeに。を使用wsl
してプログラムを実行すると、ls -lah
cmdの出力のみが表示されます。ウィンドウズ出力を指示する方法があるかどうかわかりません。どんな助けでもありがたいです。ありがとう。
cmd.exeはWindowsコマンドインタープリターです。実行するコマンドを渡したい場合は、/ cパラメータを使用する必要がありますcmd /c dir
。あなたが入力した場合cmd dir
、コマンドプロンプトで、あなたの現在の行くアプリケーションと同じ結果が得られます(ことを除いてCMDプロンプトしません自動的に近いため、標準入力の不足)。これを実行cmd /?
すると、次のように説明されます。
/ C文字列で指定されたコマンドを実行して終了します
したがって、アプリケーションを修正するには、以下を使用します。
cmd = exec.Command("cmd", "/c", "dir")
これを行う別の方法は、stdinを介してコマンドを渡すことです。
cmd := exec.Command("cmd")
cmd.Stdout = os.Stdout
stdin, err := cmd.StdinPipe()
if err != nil {
log.Fatal(err)
}
go func() {
defer stdin.Close()
io.WriteString(stdin, "dir\n")
}()
err = cmd.Run()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
BMPファイルを開く簡単な方法は次のとおりですcmd = exec.Command("explorer.exe", "test.bmp")
(これにより、デフォルトのアプリケーションが何であってもファイルが開きます)。
注:そもそも実行する必要cmd
があるのdir
は、が提供する内部コマンドだからcmd.exe
です(dir dir.* /s
windowsフォルダーで実行した場合、何もないdir.exe
か類似しているため、何も見つからない;に埋め込まれているcmd.exe
)。
注2:ls / dirをこのように実行して、フォルダーの内容を(例としてではなく)取得している場合は、ioutil.ReadDirの方が適しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加