ล่าสุด Ubuntu ได้เริ่มจัดส่งพร้อมกับ netplan จำเป็นต้องมีการกำหนดค่า yaml เพื่อตั้งค่าอินเทอร์เฟซเครือข่าย ตัวอย่างเช่น ต้องใช้ yaml ต่อไปนี้เพื่อตั้งค่า WiFi:
network:
version: 2
renderer: NetworkManager
wifis:
interface_name:
access-points:
"apn":
password: "pwd"
nameservers:
addresses: [8.8.4.4, 8.8.8.8]
dhcp4: true
ประกาศภายใต้จุดเข้าใช้งาน network_ssid_name (apn) และค่าของฟิลด์รหัสผ่าน (pwd) อยู่ในเครื่องหมายคำพูดคู่
ฉันมองไปรอบๆ เกี่ยวกับสแต็กล้นและพบสิ่งนี้
อย่างไรก็ตาม โซลูชันนี้จำเป็นต้องติดตั้งโมดูลจาก pip call ruamel.yaml ฉันต้องการบรรลุเป้าหมายนี้โดยใช้โมดูล PyYAML ที่มีอยู่แล้วในการแจกแจงหลามของฉัน
นี่คือบางสิ่งที่ฉันได้ลองไปแล้ว:
import yaml
d = {'network': {'version': 2, 'renderer': 'NetworkManager', 'wifis':{'wlp58s0': {'access-points': {b'apn': {'password': b'pwd'}}}}}}
with open('/home/edyza/result.yml', 'w') as yaml_file:
yaml.dump(d, yaml_file, default_flow_style=False, default_style=None)
ผลลัพธ์ของสิ่งนี้ก็คือ
network:
renderer: NetworkManager
version: 2
wifis:
wlp58s0:
access-points:
apn:
password: pwd
ตอนนี้ฉันลองใช้อักขระหลีกและอื่นๆ สองสามอย่าง
import yaml
d = {'network': {'version': 2, 'renderer': 'NetworkManager', 'wifis':{'wlp58s0': {'"access-points"': {'apn': {'password': "\"pwd\""}}}}}}
with open('/home/edyza/result.yml', 'w') as yaml_file:
yaml.dump(d, yaml_file, default_flow_style=False, default_style=None)
จากนั้นผลลัพธ์จะเปลี่ยนเป็น
network:
renderer: NetworkManager
version: 2
wifis:
wlp58s0:
'"access-points"':
apn:
password: '"pwd"'
ฉันสามารถเปลี่ยนแปลงอะไรได้บ้างเพื่อให้ได้ผลลัพธ์ตามที่ต้องการด้วยเครื่องหมายคำพูดคู่ที่คีย์และค่าที่เหมาะสมโดยไม่ต้องใช้โมดูลของบุคคลที่สาม
หรือมีแนวทางอื่นที่ฉันควรพิจารณาเพื่อสร้างไฟล์ yaml
ruamel.yaml
หรือ PyYAML หรือ PySyck (ทั้งสองโมดูลรองรับเฉพาะ YAML เวอร์ชันที่ล้าสมัยเมื่อสิบปีก่อนหรือมากกว่านั้น) โปรดระบุข้อมูลอ้างอิง (เช่น ในพื้นที่เก็บข้อมูล Python) ว่า *โมดูล yaml ที่จัดส่งเป็นค่าเริ่มต้นด้วย python` คืออะไร เพื่อให้เรารู้ว่าคุณหมายถึงอะไร - person Anthon   schedule 23.06.2019