首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang和DBUS

Golang和DBUS
EN

Stack Overflow用户
提问于 2016-01-26 17:51:17
回答 1查看 2.4K关注 0票数 1

我想把这个Python代码转换成Go

代码语言:javascript
复制
#!/usr/bin/python3

import sys
import dbus

if (len(sys.argv) < 2):
    print("Usage: %s <modem> <ussd-string>" % (sys.argv[0]))
    sys.exit(1)

bus = dbus.SystemBus()
path = sys.argv[1]
ussdstring = sys.argv[2]

ussd = dbus.Interface(bus.get_object('org.ofono', path),
                      'org.ofono.SupplementaryServices')

properties = ussd.GetProperties()
state = properties["State"]

if state == "idle":
    result = ussd.Initiate(ussdstring, timeout=100)[1]
elif state == "user-response":
    result = ussd.Respond(ussdstring, timeout=100)
else:
    sys.exit(1);

properties = ussd.GetProperties()
state = properties["State"]
print('USSD RESPONSE:\n', result)
print('USSD SESSION:\n', state)

我尝试了一下github.com/guelfey/go.dbus库:

代码语言:javascript
复制
package main

import (
    "fmt"
    "os"

    "github.com/guelfey/go.dbus"
)

func main() {
    fmt.Printf("DBUS Test.\n")
    conn, err := dbus.SessionBus()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Failed to connect to session bus:", err)
        os.Exit(1)
    }

    busObject := conn.Object("org.ofono", "/ril_0")
    fmt.Println("busObject:", busObject)
    var list []string
    busObject.Call("org.ofono.SupplementaryServices.Initiate", 0, "#101#").Store(&list)
    fmt.Println("list:", list)
    for _, v := range list {
        fmt.Println(v)
    }
}

但我得到了以下回应:

代码语言:javascript
复制
DBUS Test.
Failed to connect to session bus: user: Current not implemented on linux/arm

您知道如何使用这个DBUS库吗?这个库是go on ARM7的最佳库吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-01-26 18:07:10

这个特定的问题在错误消息中是正确的:

..。user:当前未在linux/arm上实现“

只为auth调用user.Current,所以如果您提供自己的Auth方法,它就不会调用user.Current

但是,看起来您必须创建自己的conn,而不是使用全局sessionBus。(有关详细信息,请参阅SessionBusConn.Auth的来源)

代码语言:javascript
复制
conn, err := dbusSessionBusPrivate()
if err != nil {
    return
}

auths := []dbus.Auth{dbus.AuthExternal(username), dbus.AuthCookieSha1(username, homedir)}
if err := conn.Auth(auths); err != nil {
    conn.Close()
    return
}

您还可以修补go.dbus,以使用另一种方法查找用户名和arm的homedir,例如检查$USER$HOME (或提交问题,或打开拉请求)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35020486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档