• 转---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

    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    ps入门之photoshop文件操作-打开与存储认识 (PS界面介绍)如何新建文档(03)
    ps入门之ps的工作界面的认识学习(界面介绍)界面的组成(02)
    markdown编辑器Typora
    5FAE8F6F96C59ED1字体
    清除浮动float (:after方法)
    SQL中Truncate的用法
    复合索引
    RESTful API 设计指南
    两种js方法发起微信支付:WeixinJSBridge,wx.chooseWXPay区别
    nuxt.js 简述
  • 原文地址:https://www.cnblogs.com/Frank99/p/9264478.html
Copyright © 2020-2023  润新知