execl(file, arg0,arg1,...) 用参数列表arg0, arg1 等等执行文件python
execv(file, arglist) 除了使用参数向量列表,其余的和execl()相同ide
execle(file, arg0,arg1,... env) 和execl 相同,但提供了环境变量字典env函数
execve(file,arglist, env) 除了带有参数向量列表,其余的和execle()相同spa
execlp(cmd, arg0,arg1,...) 于execl()相同,可是在用户的搜索路径下搜索彻底的文件路径名cmd
execvp(cmd, arglist) 除了带有参数向量列表,与execlp()相同it
execlpe(cmd, arg0, arg1,... env) 和execlp 相同,但提供了环境变量字典env编译
execvpe(cmd,arglist, env) 和execvp 相同,但提供了环境变量字典envclass
用法:
test
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<argc; i++) { printf( "%d--%s\n", i, argv[i]); } }
编译成aaa
若是你单独执行
/path/to/aaa bbb ccc
这时会打印
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--ttt1--bbb2--ccc