Tidak dapat menjalankan 'op' daripada aplikasi Go

王林
Lepaskan: 2024-02-10 08:42:08
ke hadapan
674 orang telah melayarinya

无法从 Go 应用程序运行“op”

editor php Yuzai mungkin menghadapi masalah biasa apabila membangunkan aplikasi menggunakan bahasa Go, iaitu "op" tidak boleh dijalankan daripada aplikasi Go. Isu ini boleh menyebabkan aplikasi tidak berfungsi dengan betul atau memaparkan mesej ralat. Terdapat banyak cara untuk menyelesaikan masalah ini, yang boleh diselesaikan dengan menyemak sama ada pakej yang sepadan diimport dengan betul dalam kod, atau dengan memasang semula kebergantungan yang berkaitan. Juga, cuba alat atau kaedah lain untuk menangani masalah tersebut. Saya harap pengenalan dalam artikel ini dapat membantu pembangun yang menghadapi masalah ini.

Kandungan soalan

Saya cuba menulis aplikasi pembungkus go kecil di sekitar 1password cli boleh laku op seperti ini:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    op := exec.command("op", "item", "list")
    out, err := op.output()
    if e, ok := err.(*exec.exiterror); ok {
        log.fatal(e, ": ", string(e.stderr))
    }
    fmt.println(string(out))
}
Salin selepas log masuk

Namun, saya terus mendapat ralat berikut:

2023/04/13 09:48:51 exit status 1: [error] 2023/04/13 09:48:51 error initializing client: connecting to desktop app: read: connection reset, make sure the cli is correctly installed and connect with 1password cli is enabled in the 1password app
Salin selepas log masuk

Tetapi apabila saya melakukan perkara yang sama dari skrip python seperti ini:

#!/usr/bin/env python

import subprocess

subprocess.run(["op", "item", "list"])
Salin selepas log masuk

...Saya mendapat hasil yang hebat.

Menariknya, apabila saya memanggil skrip python (bernama op.py) daripada aplikasi go, ia berfungsi dengan baik (aplikasi go yang diubah suai kelihatan seperti ini):

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    op := exec.Command("/usr/bin/python3.11", "./op.py")
    //op := exec.Command("op", "item", "list")
    out, err := op.Output()
    if e, ok := err.(*exec.ExitError); ok {
        log.Fatal(e, ": ", string(e.Stderr))
    }
    fmt.Println(string(out))
}
Salin selepas log masuk

Saya boleh menguji bahawa ia dicetak oleh aplikasi go dan bukan skrip python kerana jika saya mengeluarkan fmt.printf(...) tiada apa yang dicetak.

Untuk meringkaskan:

  • pergi -> op: tidak berfungsi
  • python(./op.py)-> ./op.py)-> op: berfungsi dengan baik
  • pergi -> python (./op.py) -> ./op.py) -> op
Penyelesaian

Saya menghadapi masalah yang sama semasa mengakses

daripada persekitaran maya pyenv. Saya rasa masalahnya ialah python boleh laku pyenv dimiliki oleh pengguna (saya).

Menukar pemilikan kepada root:root penterjemah python dan direktori tempat tinggalnya sebenarnya membantu. Tidak pasti apa yang berlaku di sebalik tabir. pyenv 虚拟环境访问 op 时遇到同样的问题。我认为问题是 pyenv 的 python Berikut ialah langkah-langkah (saya gunakan untuk mencipta persekitaran maya supaya ia tidak menggunakan pautan sym - kerana pautan sym akan menunjuk ke fail milik root):

$ python -m venv --copies .venv
$ .venv/bin/python -c "import subprocess; subprocess.call(['op', 'signin'])"
[ERROR] 2023/05/16 16:01:18 connecting to desktop app: read: connection reset, make sure the CLI is correctly installed and Connect with 1Password CLI is enabled in the 1Password app
# chown -R root:root .venv/
$ .venv/bin/python -c "import subprocess; subprocess.call(['op', 'signin'])"
 Select account  [Use arrows to move, type to filter]
Salin selepas log masuk

Ikhtisar: Tukar pemilikan boleh laku yang menghasilkan proses anak --copies (dan direktori yang ada) kepada root:root

Lihat juga siaran ini pada 1kata laluan yang kelihatan seperti isu yang sama: op 子进程的可执行文件(及其所在目录)的所有权更改为 root:root

https://1password.community/discussion/135768/call-from-a-go-program-cli-

Atas ialah kandungan terperinci Tidak dapat menjalankan 'op' daripada aplikasi Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!