Python --执行环境

目录

1, 可执行的对象声明和内建函数

1-1, callable()

1-2, compile()

1-3, eval()

1-4, exec()

2, 执行其他程序

2-1, 执行非python程序

2-1-1, os.system()

2-1-1, os.popen()


1, 可执行的对象声明和内建函数

1-1, callable()

通过callable(obj), 判断一个对象是否可调用,可调用返回True;否则返回False

In [6]: callable(dir)
Out[6]: True

1-2, compile()

通过compile(参数1, 参数2, 参数3), 将python代码生成为代码对象, 生成的代码对象就可以供exec(), eval()直接使用

参数1:为要编译的python代码

参数2:默认值为空串,表示存放代码对象的文件名字

参数3:'eval'或'single'或'exec'

'eval',可求值的表达式, 与eval一起使用

# 可求值表达式
In [7]: eval_code = compile('1+6', '', 'eval')

In [8]: eval(eval_code)
Out[8]: 7

'single',单一的执行语句,与exec一起使用

# 单一可执行语句, 注意这里的第一个参数是用引号括起来的语句,而不是字符串
In [10]: single_code = compile("print('hello, python')", '', 'single')

In [11]: exec(single_code)
hello, python

'exec', 可执行的语句组,与exec一起使用

# 可执行语句组
In [16]: exec_code = compile("""
    ...: req = input('Count how many numbers?')
    ...: for each_num in range(int(req)):
    ...:     print('each_num:', each_num)""", '', 'exec')

In [17]:

In [17]: exec(exec_code)
Count how many numbers?10
each_num: 0
each_num: 1
each_num: 2
each_num: 3
each_num: 4
each_num: 5
each_num: 6
each_num: 7
each_num: 8
each_num: 9

1-3, eval()

通过eval(), 对字符串形式表达式进行求值

In [19]: eval('123')
Out[19]: 123

In [20]: eval('1+9')
Out[20]: 10

# 注意:若eval中不是数字表达式,会报错
In [23]: eval('fdsa')
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[23], line 1
----> 1 eval('fdsa')

File <string>:1

NameError: name 'fdsa' is not defined

1-4, exec()

通过exec(), 用于执行代码对象或者字符串形式的python代码

In [26]: exec("""
    ...: x = 0
    ...: print('x is currently:', x)
    ...: while x < 5:
    ...:     x += 1
    ...:     print('incrementing x to:', x)
    ...:     """)
x is currently: 0
incrementing x to: 1
incrementing x to: 2
incrementing x to: 3
incrementing x to: 4
incrementing x to: 5

# exec接收一个文件对象
In [42]: f = open(r'C:\Users\Administrator\Desktop\1121.py')

# f.read()为读取到的python源代码
In [43]: exec(f.read())
x is currently: 0
incrementing x to: 1
incrementing x to: 2
incrementing x to: 3
incrementing x to: 4
incrementing x to: 5

2, 执行其他程序

2-1, 执行非python程序

2-1-1, os.system()

通过os.system(cmd), 用于执行cmd命令,执行期间python挂起,等待cmd执行完成后,python继续执行

In [10]: result = os.system('ipconfig')

Windows IP 配置


未知适配器 本地连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::6481:4d49:134:9d3e%5
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.8
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.1

以太网适配器 VMware Network Adapter VMnet1:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::6ac7:3ac6:8269:2c79%4
   IPv4 地址 . . . . . . . . . . . . : 192.168.11.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::9079:b8e4:1fd4:323c%6
   IPv4 地址 . . . . . . . . . . . . : 192.168.188.12
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.188.2

# 注意,os.system(cmd)只返回状态码,0表示cmd正常执行,非0表示没有正常执行
In [11]: result
Out[11]: 0

2-1-1, os.popen()

通过os.popen(cmd), 可将输出信息报错到一个类文件对象中

# os.popen返回一个类文件对象,用于保存输出信息
In [24]: f = os.popen('ipconfig')

#通过像文件一样的操作,来读取输出的信息
In [25]: result = f.readlines()

In [26]: result
Out[26]:
['\n',
 'Windows IP 配置\n',
 '\n',
 '\n',
 '未知适配器 本地连接:\n',
 '\n',
 '   媒体状态  . . . . . . . . . . . . : 媒体已断开连接\n',
 '   连接特定的 DNS 后缀 . . . . . . . : \n',
 '\n',
 '以太网适配器 以太网:\n',
 '\n',
 '   连接特定的 DNS 后缀 . . . . . . . : \n',
 '   本地链接 IPv6 地址. . . . . . . . : fe80::6481:4d49:134:9d3e%5\n',
 '   IPv4 地址 . . . . . . . . . . . . : 192.168.1.8\n',
 '   子网掩码  . . . . . . . . . . . . : 255.255.255.0\n',
 '   默认网关. . . . . . . . . . . . . : 192.168.1.1\n',
 '\n',
 '以太网适配器 VMware Network Adapter VMnet1:\n',
 '\n',
 '   连接特定的 DNS 后缀 . . . . . . . : \n',
 '   本地链接 IPv6 地址. . . . . . . . : fe80::6ac7:3ac6:8269:2c79%4\n',
 '   IPv4 地址 . . . . . . . . . . . . : 192.168.11.1\n',
 '   子网掩码  . . . . . . . . . . . . : 255.255.255.0\n',
 '   默认网关. . . . . . . . . . . . . : \n',
 '\n',
 '以太网适配器 VMware Network Adapter VMnet8:\n',
 '\n',
 '   连接特定的 DNS 后缀 . . . . . . . : \n',
 '   本地链接 IPv6 地址. . . . . . . . : fe80::9079:b8e4:1fd4:323c%6\n',
 '   IPv4 地址 . . . . . . . . . . . . : 192.168.188.12\n',
 '   子网掩码  . . . . . . . . . . . . : 255.255.255.0\n',
 '   默认网关. . . . . . . . . . . . . : 192.168.188.2\n']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值