python基础(六)python与外部(控制台)间的交互

1. sys.argv

· 应用场景:
  当我们在控制台使用python解释器运行python程序时,我们需要用户在控制台给程序传递数据。sys.argv属性返回的是控制台参数列表,列表的第一个值是运行文件的相对路径(相对于当前工作目录),其余的值是用户指定的参数。
· 举例说明:
  例如py文件是:
  #mytest.py
  def func(a, b):
    print(a+b)
  func(int(sys.argv[1]), int(sys.argv[2]))
  控制台输入是:python mytest.py 45 32
  那么控制台便会得到77的结果,原因是当在控制台输入45,32后,sys.argv[1]捕获到45,sys.argv[2]捕获到32,那么程序就可以继续进行下去直到计算出和并打印出来。

2. subprocess

· 应用场景:希望在python程序中执行一些外部命令例如:控制台命令。
注意subprocess和multiprocessing的异同:
  它们的相同点是都是开新的进程。
  不同点是:
  1.subprocess它是专门开新进程来执行外部可执行程序的,它是os.fork() 和 os.execve() 的高级封装,比如这里可以用它来执行[ping www.baidu.com]控制台命令。
  2.multiprocessing它是开新进程来执行python程序的,比如执行一个python函数等。另外multiprocessing还集成了像Queue、Pipes等方式来实现进程间的通信。
· 简单示例:直接在py文件中使用subprocess.call(cmd, shell=True)语句,通过在当前进程下创建子进程去执行cmd这个外部命令。当然也可以使用subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT)来创建一个子进程实例去执行外部命令。接下来说一下这两者的区别:
1.subprocess.call()

import subprocess
status_code = subprocess.call(arg, shell=True) # 子进程
'''
在当前进程下(正在执行的python程序称为父进程)通过创建子进程来执行外部命令。
特点是:当执行到该语句时,父进程会被挂起等待该子进程执行结束后再执行后面的语句。
这跟顺序执行的逻辑是一样的,所以我们推荐使用这个方法。
'''
arg:str or list,要执行的外部命令。例如'ping www.baidu.com'或['ping','www.baidu.com']
shell:是否调用shell来执行外部命令,默认是False
返回值:外部命令执行状态码,0表示ok。

2.subprocess.Popen()

import subprocess
child = subprocess.Popen(arg, shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT)  # 子进程。PIPE,STDOUT用大写表示它们是常量。
child.wait()
print('判断顺序的打印信息')
'''
用父进程(P)创建(open)一个子进程实例来执行外部命令(这是调的类创建实例所以返回的是子进程实例不像call函数返回的是个int)
特点:父进程并不会等待子进程的介绍。也就是说现在子进程和父进程会并行。如果你不想它们并行,
希望按顺序执行的话可以调用child.wait()来让父进程等待。
'''
arg:str or list,要执行的外部命令。例如'ping www.baidu.com'或['ping','www.baidu.com']
shell:是否调用shell来执行外部命令,默认是False
返回值:创建的子进程对象

这两个方法还有其他的参数可以参考:https://docs.python.org/3/library/subprocess.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值