सवाल gdbus के लिए {sv} तर्क कैसे पास करें?


मुझे फ़ंक्शन के तर्कों को एक शब्दकोश प्रारूप (स्ट्रिंग, संस्करण) में पास करने में समस्या है; मैं gnome में एक स्क्रीनकास्ट चलाने की कोशिश करता हूं और फ़ंक्शन शुरू करने के लिए मुझे इन अवशेषों को पारित करने की आवश्यकता होती है:

-method name="Screencast"-
  -arg type="s" direction="in" name="file_template"/-
  -arg type="a{sv}" direction="in" name="options"/-
  -arg type="b" direction="in" name="flash"/-
  -arg type="b" direction="out" name="success"/-
  -arg type="s" direction="out" name="filename_used"/-
-/method-

यह मेरा फोन है:

~$ gdbus call --session --dest org.gnome.Shell.Screencast --object-path /org/gnome/Shell/Screencast --method org.gnome.Shell.Screencast.Screencast "test_ %d_ %t.webm" {dict:string:variant:"draw-cursor",true,"framerate",35,pipeline,"vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux"}

यह rror आउटपुट है: "a {sv}": 0-33: 'a {sv}' प्रकार के मान के रूप में पार्स नहीं कर सकता है। वाक्य वाक्यविन्यास में है? धन्यवाद


4
2017-10-15 21:27


मूल




जवाब:


एक {sv} का प्रतिनिधित्व इस तरह किया जाना चाहिए:

"{'String': <'variant_value'>, 'String2': <'variant_value'>}"

इसे समझने के लिए मैंने कुछ ऑब्जेक्ट इंटरफेस पर org.freedesktop.DBus.Properties.GetAll को बुलाया क्योंकि यह एक {sv} देता है।

उदाहरण के लिए, wpa_supplicant में CreateInterface विधि एक {sv} लेता है:

gdbus call -y -d fi.w1.wpa_supplicant1 -o /fi/w1/wpa_supplicant1 -m fi.w1.wpa_supplicant1.CreateInterface "{'Ifname': <'wlan0'>}"

या एकाधिक इंटरफेस जोड़ने के लिए (स्ट्रिंग का एक वास्तविक सरणी: संस्करण):

"{'Ifname': <'wlan0'>, 'Ifname': <'wlan1'>}"

4
2017-10-16 17:31