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

    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    多点触摸的一些代码
    精灵跳跃练习
    svn安装所遇到的几个问题[转载]
    简易包边字画法
    http和socket简介
    ant使用笔记
    j2se图片拖拽练习
    A星寻路示例
    迅为瑞芯微iTOP3399开发板资料更新
    迅为i.MX6Q开发板NXP恩智浦ARM安卓linux开发板
  • 原文地址:https://www.cnblogs.com/Frank99/p/9264478.html
Copyright © 2011-2022 走看看