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
阅读(19728) | 评论(0) | 转发(1) |