码迷,mamicode.com
首页 > 编程语言 > 详细

python 执行环境

时间:2014-05-26 21:04:06      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

一些函数

执行其它非python程序

受限执行

结束执行

操作系统接口

相关模块

 

1 一些函数

callable

callable()是一个布尔函数,确定一个对象是否可以通过函数操作符(())来调用。如果函数可调用便返回True,否则便是False。 比如:

bubuko.com,布布扣
>>> callable(1)
False
>>> callable(type)
True
bubuko.com,布布扣

compile

compile(string,something,‘eval‘/‘single‘/‘exec‘)。程序员通过compile来动态的生成一个可执行的代码对象。第一个是string类型的代码,第二个不知道是什么通常为‘‘。第三个是 ‘eval‘ or ‘single‘ or ‘exec‘。 当string代表的是一个可以求值的表达式的时候,选‘eval‘,当string是一个单行的可执行的python语句选‘single‘,如果string是多行语句选exec。

bubuko.com,布布扣
>>> exeObj=compile(8+40,‘‘,eval)
>>> eval(exeObj)
48
>>> exeObj=compile("print ‘hello world‘",‘‘,single)
>>> exec exeObj
hello world
>>> exeObj=compile(‘‘‘
... for i in range(0,3):
...     print i
... ‘‘‘,‘‘,exec)
>>> exec exeObj
0
1
2
bubuko.com,布布扣

但是,

bubuko.com,布布扣
>>> callable(exeObj)
False
bubuko.com,布布扣

因为 exeObj不可以用"()"来调用。

eval和exec

eval(), eval可以接受一个字符串(字符串的内容必须是一个表达式)或者compile返回的可执行代码段作为参数,然后对参数求值。

exec 与 eval一样。不过exec还可以执行文件,但文件内容必须是可执行的代码。比如:

我们有一个文件 runFor.py 

bubuko.com,布布扣
bash-2.05$ cat runFor.py
for i in range(0,5):
        print i
bubuko.com,布布扣

在python里面,我们用exec来执行这个文件

bubuko.com,布布扣
>>> f=open(runFor.py)
>>> exec f
0
1
2
3
4
bubuko.com,布布扣

所以,exec可以执行文件。但是我们再运行一下 exec f

bubuko.com,布布扣
>>> exec f
>>>
bubuko.com,布布扣

什么都没有,这是为什么呢? 这是因为此时f已经读到文件末尾了,我们用f的tell属性来看当前文件内指针在哪,

bubuko.com,布布扣
>>> f.tell()
31L
bubuko.com,布布扣

再对比一下文件的大小

bubuko.com,布布扣
>>> import os
>>> os.path.getsize(runFor.py)
31L
bubuko.com,布布扣

可知当前文件指针在结尾处了,我们可以用f.seek(0)来把指针移动回开头

bubuko.com,布布扣
>>> f.seek(0)
>>> exec f
0
1
2
3
4
bubuko.com,布布扣

input

input等同于eval和raw_input的组合。 我们用例子说明:

bubuko.com,布布扣
>>> a=raw_input(input something: )
input something: [1,2,3,4]
>>> a
[1,2,3,4]
bubuko.com,布布扣

上面我们用raw_input来读取输入,虽然我们输入的是[1,2,3,4],但是实际上返回的是string

bubuko.com,布布扣
>>> a=input(input something: )
input something: [1,2,3,4]
>>> a
[1, 2, 3, 4]
bubuko.com,布布扣

而如果用input,我们输入的是[1,2,3,4] 返回的也是[1,2,3,4] 相当于用eval 把raw_input的值求值了一下。

 

2 执行非python程序

2.1 os.system

os.system(‘cmd‘) 会执行cmd。cmd可以是命令也可以是外部程序,os.system在执行后会把输出打印到标准输出,同时会返回一个值,如果成功返回0,如果不成功返回非零。

bubuko.com,布布扣
>>> import os
>>> a=os.system(uname)
SunOS
>>> a
0
bubuko.com,布布扣

2.2 os.popen

与os.system一样,os.popen(‘cmd‘)会执行外部命令cmd。但是os.popen会把返回值放入一个文件对象。

bubuko.com,布布扣
>>> import os
>>> a=os.popen(ls -l)
>>> print a.readline()
total 64

>>> print a.readline()
-rw-r--r--   1 oratop   dba            0 May 22 17:17 a

>>> print a.readline()
-rw-r--r--   1 oratop   dba           59 May 16 13:54 importee.py

>>> print a.readline()
-rw-r--r--   1 oratop   dba          259 May 16 13:54 importee.pyc

>>> print a.readline()
-rw-r--r--   1 oratop   dba          282 May 16 11:42 m1.pyc
View Code

 

 

python 执行环境,布布扣,bubuko.com

python 执行环境

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/kramer/p/3745985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!