Keputusan yang membingungkan berbeza antara menggunakan os/exec dan melaksanakan daripada baris arahan

王林
Lepaskan: 2024-02-14 12:45:09
ke hadapan
953 orang telah melayarinya

使用 os/exec 和在命令行执行之间出现令人费解的不同结果

Editor PHP Zimo membawakan anda analisis keputusan berbeza yang membingungkan yang berlaku apabila menggunakan fungsi os/exec dalam PHP dan melaksanakan arahan pada baris arahan. Dalam aplikasi praktikal, kita mungkin menghadapi situasi di mana arahan yang boleh dilaksanakan dengan jayanya pada baris arahan tidak boleh memperoleh hasil yang sama apabila menggunakan fungsi os/exec. Keadaan ini sering menyebabkan kita keliru dan sukar untuk mencari penyelesaian. Artikel ini akan menganalisis sebab anda dan menyediakan penyelesaian untuk membantu anda memahami dan menggunakan fungsi os/exec dengan lebih baik.

Kandungan soalan

Saya menulis program untuk menjalankan arahan dalam golang menggunakan pakej os/exec.

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("taskkill", "/f /im VInTGui.exe")
    err := cmd.Run()
    if err != nil {
        fmt.Printf("err: %v\n", err)
    }
}
Salin selepas log masuk

Apabila saya menjalankan program, ia mencetak: err: exit status 1

Tetapi apabila saya menjalankan arahan taskkill /f /im vintgui.exe dalam baris arahan windows. Ia berjaya.

Mengapa menjalankan arahan melalui pakej os/exec包运行命令和直接通过windows命令行(使用相同用户相同权限)运行命令有不同的结果?如何修复我的程序?

解决方法

解决方案是使用 command 对象的 stderr mempunyai hasil yang berbeza daripada menjalankan arahan secara terus melalui windows command line (menggunakan pengguna yang sama dan kebenaran yang sama)? Bagaimanakah saya boleh membetulkan program saya?

Penyelesaian

Penyelesaian adalah dengan menggunakan sifat stderr objek command. Ini boleh dilakukan seperti ini:

cmd := exec.command("taskkill", "/f /im vintgui.exe")
var out bytes.buffer
var stderr bytes.buffer
cmd.stdout = &out
cmd.stderr = &stderr
err := cmd.run()
if err != nil {
    fmt.printf("%v: %s\n", err, stderr.string())
    return
}
fmt.println("result: " + out.string())
Salin selepas log masuk

Mengikut situasi anda, ubah sahaja

exec.command("taskkill", "/f /im vintgui.exe")
Salin selepas log masuk
🎜kepada🎜
exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")
Salin selepas log masuk
🎜Jangan gabungkan semua parameter menjadi satu rentetan. 🎜

Atas ialah kandungan terperinci Keputusan yang membingungkan berbeza antara menggunakan os/exec dan melaksanakan daripada baris arahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan