• Python是如何调用系统命令的


    在Python里面,直接调用系统命令,可以快速的完成任务。一般使用os或者subprocess模块,来执行系统命令。

    os.system()


    该函数返回命令执行结果的返回值,system()函数在执行过程中进行了以下三步操作:

    1、fork一个子进程;

    2、在子进程中调用exec函数去执行命令;

    3、在父进程中调用wait(阻塞)去等待子进程结束。

    返回0表示命令执行成功,其他表示失败。

    注意:使用该函数经常会莫名其妙地出现错误,但是直接执行命令并没有问题,所以一般建议不要使用。

    用法:os.system(“command”)

    os.popen()
    这种调用方式是通过管道的方式来实现,函数返回是 file read 的对象,对其进行读取read、readlines等操作可以看到执行的输出。

    注意:如果命令执行失败,就读取不到内容。

    用法:os.popen(“command”)

    subprocess.Popen()
    subprocess模块被推荐用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*等

    subprocess模块目的是fork一个新的进程并与之通信,最常用是定义类Popen,使用Popen可以创建进程,并与进程进行复杂的交互。其函数原型为:

    subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
    1
    args:这个参数必须是字符串或者是一个由字符串成员的列表。其中如果是一个字符串列表的话,那第一个成员为要运行的程序的路径以及程序名称;从第二个成员开始到最后一个成员为运行这个程序需要输入的参数。

    executable:指定要运行的程序,这个一般很少用到,因为要指定运行的程序在args中已经指定了。stdin,stdout ,stderr:分别代表程序的标准输入、标准输出、标准错误处理。可以选择的值有PIPE,已经存在的打开的文件对象和NONE。若stdout是文件对象的话,要确保文件对象是处于打开状态。

    shell:默认是False。shell参数根据要执行的命令情况来定,如果将参数shell设为True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

    bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲

    cwd:用于设置子进程的当前目录

    stdin, stdout, stderr:分别表示程序的标准输入、标准输出、标准错误输出,可以是 subprocess.PIPE 或 其他程序、文件。

    env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

    universal_newlines:不同系统的换行符不同,True 即使用

    preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。

    用法: child = subprocess.Popen([“cmd”,“arg1”…])

    subprocess.Popen类的实例可调用的方法
    Popen.poll() 用于检查子进程(命令)
    是否已经执行结束,没结束返回None,结束后返回状态码。

    Popen.wait(timeout=None)
    等待子进程结束,并返回状态码;如果在timeout指定的秒数之后进程还没有结束,将会抛出一个TimeoutExpired异常。

    Popen.communicate(input=None, timeout=None)
    该方法可用来与进程进行交互,比如发送数据到stdin,从stdout和stderr读取数据,直到到达文件末尾。

    Popen.send_signal(signal)
    发送指定的信号给这个子进程。

    Popen.terminate()
    停止该子进程。

    Popen.kill()
    杀死该子进程。

     
    原文链接:https://blog.csdn.net/qq_43428310/article/details/106684606

  • 相关阅读:
    跨域
    关于DEDECMS自定义模型当中添加自定义字段后在后台添加内容后不显示解决方案
    js复制文本
    dedecms 织梦显示时间格式
    基本特效:饿了么丝滑无缝过度搜索栏的实现
    2016-wing的年度总结
    这交互炸了(四) :一分钟让你拥有微信拖拽透明返回PhotoView
    这交互炸了(三):闪屏页是像云一样消失的
    这交互炸了(二):爱范儿是如何让详情页缩小为横向列表的
    这交互炸了:饿了么是怎么让Image变成详情页的
  • 原文地址:https://www.cnblogs.com/LQZ888/p/13099625.html
Copyright © 2020-2023  润新知