求教python exec*函数怎么用?

cqin 2004-11-29 12:54:40

os.execl("usr/bin/python","test.py",`'i')报errno 2, no such file or directory
哪位能提供一个exec的范例啊。

都折腾半天了。我就是想知道exec*函数到底怎么调用的。
...全文
1703 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyzxyz1111 2004-11-30
  • 打赏
  • 举报
回复
比如你写一个c程序如下。
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 bb cc
这是会打印
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 有多种选项。

cqin 2004-11-30
  • 打赏
  • 举报
回复
请问“argv[0]可以是任意的”是什么意思?
是说对于仅仅对于/usr/bin/python有用,是/usr/bin/python的第一个参数,也就是文件名,但是对于test.py是没有用处的。是这个意思么?(估计就是了)多谢
还有一个问题
假如这个值我设“aa”,然后运行的时候用ps去看,那我看到的应该是python还是aa那?
是不是这个值和进程名没有任何关系?
xyzxyz1111 2004-11-29
  • 打赏
  • 举报
回复
应该是这样
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]可以是任意的。
limodou 2004-11-29
  • 打赏
  • 举报
回复
可能是这样的(我不太清楚了):

exec*的函数调用是把命令行中用空格分开的参数都作为一个参数来传递,因此,合成的命令行就是:

/usr/bin/python test.py i

看文档应该(不行就看C的说明)能比较清楚。
cqin 2004-11-29
  • 打赏
  • 举报
回复
嗯,那个是我漏了
不过问题不是在这里,问题是在第二个参数没有用。也就是说她认为python编辑器要执行的是第三个参数`i`代表值
那么第二个参数是干嘛用的那?
limodou 2004-11-29
  • 打赏
  • 举报
回复
你的usr/bin/python前面是不是少了个'/',不然它是一个相对路径。应该是绝对路径。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧