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