【发布时间】:2015-01-24 21:40:59
【问题描述】:
我正在尝试编写一个简单的 C 程序,它执行 Python 脚本(并让它运行...)并自行关闭。
我尝试了以下命令,但在这两种情况下 C PROGRAM 仍然存在...
popen("sudo python /home/pi/main.py", "r");
system("sudo python /home/pi/main.py");
谢谢!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 已编辑!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
我根据你的 cmets 尝试了这个命令,但没有成功:
char *argv[] = {"/home/pi/main.py"};
execv("sudo python", argv);
有人可以帮忙吗?谢谢!
!!!!!!!!!!!!编辑 2 !!!!!!!!!!!!!!!
我是这样编译的:
gcc -Wall restart.c -o safekill
这是C程序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
my_popen(char cmd[])
{
FILE *fp;
char path[1035];
fp = popen(cmd, "r");
if (fp == NULL)
{
printf("Failed to run command\n");
exit(1);
}
//Read the output a line at a time - output it
while (fgets(path, sizeof(path)-1, fp) != NULL)
{
printf("%s", path);
}
pclose(fp);
}
int main()
{
my_popen("sudo killall python");
sleep(1);
my_popen("sudo killall raspivid");
sleep(1);
if(fork())
printf("Am I here?");
return 0;
char *file = "restart";
char *argv[] = {file, "-c", "sudo python main.py", NULL};
execvp(file, argv);
}
结果:它打印我在这里,但没有启动 python。 真是令人沮丧.... :-(
【问题讨论】:
-
exec?
-
您不是打开应用程序,而是执行程序。请参阅execve(2)、exec(3) 并阅读Advanced Linux Programming
-
@BasileStarynkevitch 虽然您在技术上是正确的,但命令名称
popen似乎不同意您的意见。 -
顺便说一句,您可能仔细阅读setuid以避免
sudo。
标签: c linux ubuntu-14.04