Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Keputusan yang membingungkan berbeza antara menggunakan os/exec dan melaksanakan daripada baris arahan

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

王林
王林ke hadapan
2024-02-14 12:45:09951semak imbas

使用 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)
    }
}

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())

Mengikut situasi anda, ubah sahaja

exec.command("taskkill", "/f /im vintgui.exe")
🎜kepada🎜
exec.Command("taskkill", "/f", "/im",  "VInTGui.exe")
🎜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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam