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\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--ttt
1--bbb
2--ccc

转---python os.exec*()家族函数的用法的更多相关文章

  1. (转)Python中的split()函数的用法

    Python中的split()函数的用法 原文:https://www.cnblogs.com/hjhsysu/p/5700347.html Python中有split()和os.path.split ...

  2. python路径拼接os.path.join()函数的用法

    os.path.join()函数:连接两个或更多的路径名组件 1.如果各组件名首字母不包含’/’,则函数会自动加上 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃 3.如果最后一个组 ...

  3. $Python常用内置函数典型用法

    Python中有许多功能丰富的内置函数,本文基于Python 2.7,就常用的一些函数的典型用法做一些积累,不断更新中. sorted函数的三种用法 # coding:utf-8 # sorted函数 ...

  4. python os模块进程函数

    Table of Contents 1. 系统进程 2. 举例 2.1. os.fork 2.2. os.exec 和 os.system 2.3. os.wait 3. 总结 系统进程 今天在看&l ...

  5. Python OS模块常用函数说明

    Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Wi ...

  6. Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下:    join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字 ...

  7. python os模块实用函数

    os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos ...

  8. Python中的split()函数的用法

    函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...

  9. python os.path.isfile函数

    最近刚开始学习Python,做了个小练习:扫描当前目录及其子目录中的文件,找出文件名中含有指定关键字的文件并打印文件名.思路很简单,如果是文件则判断是否满足条件:如果是目录则进入目录搜索文件,递归. ...

随机推荐

  1. 关于splice()方法,slice() 、split()方法讲解,reverse()方法、replace()方法

    1.slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规定从数组 ...

  2. mybatis批量插入和批量更新

    批量插入数据使用的sql语句是: insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) mybatis中mapper.xml的代码如下: & ...

  3. [linux学习]sysctl 以及 net.ipv4.ip_forward

    1. sysctl 命令显示 当前系统的参数配置信息 显示全部配置信息 sysctl -a 帮助信息主要如下: [root@k8s-master ~]# sysctl -help Usage: sys ...

  4. Windows下面dir 总是输入成ls的一个解决方法

    转帖:http://blog.csdn.net/venusic/article/details/50543058 新建一个ls.bat文件 输入 @echo off dir 然后放到环境变量存在的一个 ...

  5. angular2+中数据变更子组件页面未更新

    引入监测 import {ChangeDetectorRef} from '@angular/core'; constructor( private changeDetectorRef:ChangeD ...

  6. CF527D

    题面 这题还挺水的,把那个式子稍微变形一下就可以的到xi-wi>=xj+wj,易知:若把每个点看做一条线段,左端点是xi-wi,右端点是xi+wi,就只要求最多的不重叠的线段数就可以了,然后就是 ...

  7. BZOJ4891 TJOI2017龙舟(Polllard-Rho)

    对给定模数分解质因数后约分即可.依然常数巨大过不了. #include<iostream> #include<cstdio> #include<cmath> #in ...

  8. 睡前小dp-poj1276-多重背包+二进制优化

    http://poj.org/problem?id=1276 简单的多重背包,不过需要优化一下才能过.网上还有暴力的做法. 二进制优化在背包九讲里讲的比较清楚.对于多重背包的每一件物品,使用二进制的形 ...

  9. xml和对象 转换

    //测试数据 static List<User> list = new List<User>() { new User(){id=1001 ,name="语文&quo ...

  10. IDEA上传码云报错Push rejected: Push to origin/master was rejected

    原因是README.md文件冲突,码云上在创建项目的时候不要初始化README.md,然后再用IDEA上传