gpt4 book ai didi

c++ - Python服务器脚本与C程序通信报错

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:40 27 4
gpt4 key购买 nike

我的应用程序的目标是通过以太网链接控制我的嵌入式目标上的一些 LED。我的嵌入式主板支持 lighttpd 网络服务器。从这个网络服务器,我可以运行 python 脚本,毫无问题地读取到我板上的设备。当我试图写入这些设备时,问题就来了。 lighttpd 服务器作为“www”组运行。我的开发板的 root 用户没有密码。我强制 lighttpd 服务器以 root 身份运行的任何尝试都会导致 lighttpd 根本无法启动。所以我制作了一个 C 程序,作为子进程调用,通过 python 脚本中的 sudo 提升到根目录。

我控制 LED 的 C 程序:

int main(int argc, char* args[]){   
string python_message = "";
bool quit = false;

while (!quit)
{
cin >> python_message;
if (python_message == "quit"){
quit = true;
}else if (python_message == "1"){
ledn(1,"1");
}else if (python_message == "2"){
ledn(1,"0");
}else {
cout << "Huh?" << endl;
}
}
return 0;
}

cgi-bin 中的 python 脚本

import sys
import time

print "Blinking User LED Program"

import subprocess
proc = subprocess.Popen(["sudo","/usr/bin/slave"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

print "1"
proc.stdin.write("1\n")
time.sleep(.5)
print "0"
proc.stdin.write("0\n")
time.sleep(.5)

如果我注释掉 proc.stdin 和 proc.stdout 行,我的程序就会运行并提供所有打印语句输出。当出现这些行时,我会收到 500 服务器错误。

最佳答案

Ricardo Cárdenes 关于更改设备所有权或权限的建议是一个很好的建议,但如果您不能这样做,只需将 lighttpd 调用的 Python 脚本设为“setuid”脚本,这意味着 lighttpd 将调用它作为 www 但它将以 root 身份运行。

我通常不建议制作脚本 setuid (制作一个已编译的 C 程序 setuid 可能不那么危险)。但在你的情况下,你似乎并不关心安全性(因为你提到尝试以 root 身份运行 lighttpd),所以我试一试。只是不要忘记您的 setuid 脚本可以做任何它想做的事!

关于c++ - Python服务器脚本与C程序通信报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com