subprocess.call通过python cgi脚本raspberry pi

2024-05-15 01:55:43 发布

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

所以我有一个Raspberry Pi,我已经将其设置为hostapd和isc dhcp服务器的访问点。它广播一个SSID,我用我的电话或笔记本电脑连接到它,转到192.168.42.1,它提供了一个页面,在那里我有一个SSID、PSK和设备ID的表单。它的想法是,它应该连接到网络,通过调用一堆子进程调用我给它的信息,事实上,它没有

这是索引.html公司名称:

<html>
<body>
<form enctype="multipart/form-data" action="/cgi-bin/set_wifi.py" method="POST">

ssid: <input type="text" size="70" name="ssid" value=""><br>
pass: <input type="text" size="70" name="pass" value=""><br>
devid: <input type="text" size="70" name="devid" value=""><br>

<input type="submit" value="Submit">  
<input type="reset" value="Reset">

</form>
</body>
</html>

开始的内容_wifi.py具体如下:

^{pr2}$

我有另一个python脚本停止apd.py基本上就是之后的一切文件.close()在片场_wifi.py上面的脚本。当我把它通过终端时,它工作得很好。如果网络已保存在wpa中,则停止网络连接、重写接口、重新启动网络并重新建立wlan0_请求者.conf在

问题是一旦设定_wifi.py通过cgi执行,脚本的前半部分正常工作,它写入德维德.txt还有水渍险_请求者.conf但唯一的subprocess.call我认为工作正常的是

cp /etc/network/interfaces-manual /etc/network/interfaces

它将接口文件从静态更改为dhcp。。。在

其他命令似乎都没有运行…但是当我运行与停止apd.py从终端工作…我不知道为什么…任何帮助将不胜感激。在


Tags: textnamepybr网络form脚本input
2条回答

这让我抓狂,但我一直在努力,这是我想出的。。。在

成套_wifi.py,之后我把一切都注释掉了文件.close()并添加

file=open('/home/pi/project/set_wifi_ran.txt','w')
file.write('set_wifi_ran') 
file.close()

然后我有另一个脚本一直在运行停止apd.py…它可以监控set_wifi_运行.txt,如果它有任何更改,它将执行子流程调用…解决了我所有的问题

^{pr2}$

我相信这不是一个非常优雅的方法来做到这一点…我将非常感谢任何反馈,我仍然很想知道为什么这在cgi脚本中不起作用

sudo只对sudoers文件(/etc/sudoers)中指定的用户有效。很可能是您的web服务器与另一个用户一起运行,而没有sudo的能力。在

这就解释了为什么只有非sudo命令在执行。在

要么使用现有的看门狗解决方案,要么在sudoers文件中添加webserver用户。或者使用以用户身份运行的自定义web服务器。在

相关问题 更多 >

    热门问题