python - 在c中执行python脚本并获取脚本pid

标签 python c process

我想在 c 中执行一个 python 脚本来获取自定义可执行文件名称,但我所有的尝试基本上都失败了,因为它总是涉及一些子进程,而我没有 pid 来“联系”它...

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/shm.h>

void  SIGINT_handler(int);
void  SIGTERM_handler(int);
void  SIGUSR1_handler(int);

int   ShmID;
pid_t *ShmPTR;
pid_t c_pid; // should be the script pid

int main(void) {
  pid_t p_pid = getpid();
  key_t MyKey;
  if (signal(SIGINT, SIGINT_handler) == SIG_ERR) {
    printf("SIGINT install error\n");
    exit(1);
  }
  if (signal(SIGTERM, SIGTERM_handler) == SIG_ERR) {
    printf("SIGTERM install error\n");
    exit(2);
  }
  if (signal(SIGUSR1, SIGUSR1_handler) == SIG_ERR) {
    printf("SIGUSR1 install error\n");
    exit(3);
  }
  MyKey   = ftok(".", 's');
  ShmID   = shmget(MyKey, sizeof(pid_t), IPC_CREAT | 0666);
  ShmPTR  = (pid_t *) shmat(ShmID, NULL, 0);
  *ShmPTR = p_pid;

  //---This is where I'm stuck---
}

void  SIGINT_handler(int sig) {
  signal(sig, SIG_IGN);
  kill(c_pid, sig);//send interrupt signal to pyton script
  printf("From SIGINT: just got a %d (SIGINT ^C) signal\n", sig);
  signal(sig, SIGINT_handler);
}

void  SIGTERM_handler(int sig) {
  signal(sig, SIG_IGN);
  kill(c_pid, sig);//send terminate signal to python script
  printf("From SIGTERM: just got a %d (SIGTERM ^\\) signal"
                          " and is about to quit\n", sig);
  shmdt(ShmPTR);
  shmctl(ShmID, IPC_RMID, NULL);

  exit(3);
}

void  SIGUSR1_handler(int sig) {
  signal(sig, SIG_IGN);
  kill(c_pid, sig);//send user signal 1 to python script
  printf("From SIGUSR1: just got a %d (SIGUSR1 ^C) signal\n", sig);
  signal(sig, SIGUSR1_handler);
}

Disclaimer: I'm more of a beginner in C

我该如何去做呢?

最佳答案

认为您想要的是一种从Python脚本创建可执行文件的方法。有一些工具可以做到这一点:

或者您可以embed the Python interpreter in C .

关于python - 在c中执行python脚本并获取脚本pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36548339/

相关文章:

c - 正在初始化未初始化的值?

python - 完全关闭 Python 脚本

Python从受密码保护的pdf中获取页数

python - 如何在每个对象方法之后获得一个名为(装饰器?)的方法

python - JSON 模式属性的范围比预期更广

java - Java 中的 Runtime.exec() 挂起,因为它正在等待来自 System.in 的输入

c - 为什么这不打印到标准输出 (stdout)?

Python Deque - 10 分钟的数据

android - 如何在c4droid中使用sd2原语和sdl2_gfx

c - 获取(char *)func1.Version的值;在局部变量中使用c