Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165204
  • 博文数量: 16
  • 博客积分: 503
  • 博客等级: 下士
  • 技术积分: 206
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-11 21:46
文章分类
文章存档

2011年(16)

我的朋友

分类: Python/Ruby

2011-02-14 23:24:53

os.execl( "/usr/bin/python ", "test.py ",` 'i ')这样写是不行的,

要这样 

os.execl( "/usr/bin/python ", "python ",` 'test.py ',   'i ') 

os.exec*()   都只是posix系统的直接映射,所以os.execl的第一个参数 "/usr/bin/python "是程序的可执行文件,而其他的都是program   argument,就是c   中int   main(int   argc,   char**   argv)中的argv。 
而python的sys.argv应是c中argv的[1:],所以   os.execl中的第二个参数 "python "对于python程序test.py不可见而且没有用。 
实际上os.execl的第二个参数也就是int   main(int   argc,   char**   argv)中的argv[0]可以是任意的,它本质上是提供给c程序作为main()函数的第一个参数使用。

比如你写一个c程序如下。 
int   main(int   argc,   char   **   argv) 

        int   i; 
        for(i=0;i         { 
              printf( "%d--%s\n ",   i,   argv[i]); 
        }       

编译成aaa 

如果你单独执行 
/path/to/aaa   bb   cc 
这是会打印 
0--/path/to/aaa 
1--bbb 
2--ccc 
实际上Shell执行execl( "/path/to/aaa ", "/path/to/aaa ", "bbb ", "ccc ")把argv[0]设置为/pat/to/aaa 

产生一个误解就是认为execl中第二个参数必须是 "/path/to/aaa "的程序名,其实不然。 

而用   
os.execl( "/path/to/aaa ", "ttt ", 'bbb ',   'ccc ') 
则打印 
0--ttt 
1--bbb 
2--ccc 

阅读(19762) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~