2013-09-27 17 views
0

我有这样一段代码运行Python程序,我希望我的壳,当我输入类似以下运行Python程序: mysh> hello.py如何在C程序中运行Python可执行文件(.py)(例如使用execvp)?

但hello.py不传递到/ usr/bin/python在execvp和我需要帮助搞清楚如何正确地传递参数到execvp。

if (pid==0) // child process   
    { 

     if (py_flag==1) 
     execvp("/usr/bin/python",argv); 
     else 
     { 

     execvp(argv[0],argv); 
     perror("error"); 
     } 
    } 

而这里的我收到的结果:

./basic_shell 
mysh> hello.py 
I am a python program 
Python 2.6.6 (r266:84292, May 27 2013, 05:35:12) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

虽然我希望收到这样的结果:

$ python hello.py 
sys.argv[0] = hello.py 

请让我知道如何加以固定。

回答

1

我改变了我的代码,这一点,现在它按预期工作:

if (pid==0) //child process 
    { 

     if (py_flag==1) 
     { 
      char *new_argv[2]; 
      new_argv[0]="/usr/bin/python"; 
      new_argv[1]=argv[0]; 
      new_argv[2]=0; 
      //execvp("/usr/bin/python",argv); 
      execvp(new_argv[0],new_argv); 
     } 
     else 
     { 

     execvp(argv[0],argv); 
     perror("error"); 
     } 
    } 
相关问题