如何使用python脚本编辑sudo权限linux文件

2024-05-14 06:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在向需要sudo权限的文件追加文本。当我运行下面的python脚本时:

import subprocess
ssid= "testing"
psk= "testing1234" 
p1 = subprocess.Popen(["wpa_passphrase", ssid, psk], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["sudo","tee","-a","/etc/wpa_supplicant/wpa_supplicant.conf",">","/dev/null"], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
output,err = p2.communicate

它将按预期附加到文件,但将附加以下内容:

network={
    ssid="testing"
    #psk="testing1234"
    psk=9891dab18debe8308a5d3bf596f5277e4a5c158bff016145830b12673ef63360
}

当我想要这个的时候:

network={
    ssid="testing"
    psk="testing1234"
    key_mgmt=WPA-PSK
}

这个子进程语法对我来说很复杂,所以我愿意接受另一种方法!我试图使用f=open("appendedtext >> /etc/wpa_supplicant/wpa_supplicant.conf"),但我需要以sudo的身份运行,而且我似乎找不到通过open()实现这一点的方法。我得到一个权限错误。 感谢您的帮助!!你知道吗


Tags: 文件权限stdoutsudotestingwpasupplicantsubprocess
1条回答
网友
1楼 · 发布于 2024-05-14 06:33:11

这不是python或子进程问题,您将从wpa_passphrase获得预期的输出,请参见手册页:

NAME
       wpa_passphrase - Generate a WPA PSK from an ASCII passphrase for a SSID

SYNOPSIS
       wpa_passphrase [ ssid ] [ passphrase ]

OVERVIEW
       wpa_passphrase pre-computes PSK entries for network configuration blocks of a wpa_supplicant.conf file. An ASCII passphrase and SSID are
       used to generate a 256-bit PSK.

如果您需要纯文本密码,只需将其写入文件而不调用wpa_passphrase

with open('/etc/wpa_supplicant/wpa_supplicant.conf', 'a') as conf:
   conf.writelines(['network={\n', '\tssid="{0}"\n'.format(ssid), '\tpsk="{0}"\n'.format(psk), '\tkey_mgmt=WPA-PSK\n', '}\n'])

别忘了用sudosudo python script.py来称呼它。你知道吗

相关问题 更多 >