zoukankan      html  css  js  c++  java
  • 转---python os.exec*()家族函数的用法

    execl(file, arg0,arg1,...) 用参数列表arg0, arg1 等等执行文件

    execv(file, arglist) 除了使用参数向量列表,其他的和execl()相同

    execle(file, arg0,arg1,... env) 和execl 相同,但提供了环境变量字典env

    execve(file,arglist, env) 除了带有参数向量列表,其他的和execle()相同

    execlp(cmd, arg0,arg1,...) 于execl()相同,但是在用户的搜索路径下搜索完全的文件路径名

    execvp(cmd, arglist) 除了带有参数向量列表,与execlp()相同

    execlpe(cmd, arg0, arg1,... env) 和execlp 相同,但提供了环境变量字典env

    execvpe(cmd,arglist, env) 和execvp 相同,但提供了环境变量字典env

    用法:

    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程序如下。 

    1
    2
    3
    4
    5
    6
    7
    8
    int main(int argc, char** argv) 
            int i; 
            for(i=0; i<argc; i++) 
            
                  printf"%d--%s ", 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--ttt
    1--bbb
    2--ccc

    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth 题解
    洛谷 P1957 口算练习题 题解
    洛谷 P2036 Perket 题解
    洛谷 P2369 EXCEEDED WARNING A 题解
    洛谷 P1184高手之在一起 题解
    洛谷 P1897电梯里的爱情 题解
    Python做的眼睛护士
    Python-Tkinter的Entry详解
    Python的TkinterButton做为父窗口
    Python用Tkinter的Frame实现眼睛护士的倒计时黑色屏幕
  • 原文地址:https://www.cnblogs.com/Frank99/p/9264478.html
Copyright © 2011-2022 走看看