exec執行普通文件和解釋器文件的區別
(1) 在命令行輸入:./a.py arg1 arg2;
(2) execl(./a.py,arg1,arg2,(char*)0));
(3) execl(./a.py,”xxx”,arg1,arg2,(char*)0));
方式(1)和方式(2)不等價(jià),因為方式(1)中arg1會(huì )被當做第二個(gè)參數傳遞給解釋器,而方式(2)中arg2會(huì )被當做第二個(gè)參數傳遞給解釋器。方式(1)和方式(3)是等價(jià)的。
對于普通文件foo:
(1) 在命令行輸入: ./foo arg1 arg2;
(2) execl(./foo,arg1,arg2,(char*)0))
方式(1)和方式(2)是等價(jià)的。
4. 回答開(kāi)始的問(wèn)題
為了達到命令行方式:test.py arg1 arg2的效果,使用execl(test.py,arg1,arg2,(char*)0))肯定是不行的,因為arg1會(huì )被忽略,提示缺少參數。正確的方式是:execl(test.py,”xxx”,arg1,arg2,(char*)0)),這里”xxx”代表任意字符串,不過(guò)一般會(huì )使用解釋器文件名,即”test.py”。
為了達到命令行方式:python test.py arg1 arg2的效果,使用execl(python,”test.py”,arg1,arg2,(char*)0))也是不行的,因為test.py會(huì )被忽略,arg1會(huì )被當做第一個(gè)參數傳給python解釋器。正確方式是:
execl(“python,”xxx”,”test.py”,arg1,arg2,(char*)0)),這里”xxx”代表任意字符串,不過(guò)一般會(huì )使用解釋器文件名,即”test.py”。
評論