最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

python中subprocess批量执行linux命令

来源:动视网 责编:小采 时间:2020-11-27 14:21:52
文档

python中subprocess批量执行linux命令

python中subprocess批量执行linux命令:本篇文章给大家详细讲述了python中使用subprocess批量执行linux命令的方法,有兴趣的朋友参考学习下。可以执行shell命令的相关模块和函数有:os.systemos.spawnos.popen --废弃popen --废弃commands --废弃,3.x中被移除以上执行shell命令
推荐度:
导读python中subprocess批量执行linux命令:本篇文章给大家详细讲述了python中使用subprocess批量执行linux命令的方法,有兴趣的朋友参考学习下。可以执行shell命令的相关模块和函数有:os.systemos.spawnos.popen --废弃popen --废弃commands --废弃,3.x中被移除以上执行shell命令


本篇文章给大家详细讲述了python中使用subprocess批量执行linux命令的方法,有兴趣的朋友参考学习下。

可以执行shell命令的相关模块和函数有:

  • os.system

  • os.spawn

  • os.popen --废弃

  • popen --废弃

  • commands --废弃,3.x中被移除

  • 以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。

    subprocess

    call

    执行命令,返回状态码

    >>> import subprocess
    >>> ret = subprocess.call(["ls", "-l"], shell=False)
    total 4684
    -rw-r--r-- 1 root root 454 May 5 12:20 aa.py
    -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt
    -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
    -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt
    -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf
    >>> ret = subprocess.call("ls -l", shell=True)
    total 4684
    -rw-r--r-- 1 root root 454 May 5 12:20 aa.py
    -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt
    -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
    -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt
    -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf
    >>> print(ret)
    0

    check_call

    执行命令,如果执行状态码是 0 ,则返回0,否则抛异常

    >>> subprocess.check_call(["ls", "-l"])
    total 4684
    -rw-r--r-- 1 root root 454 May 5 12:20 aa.py
    -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt
    -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
    -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt
    -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf
    0
    >>> subprocess.check_call("exit 1", shell=True)
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 581, in check_call
     raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

    check_output

    执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常

    >>> subprocess.check_output(["echo", "Hello World!"])
    b'Hello World!
    '
    >>> subprocess.check_output("exit 1", shell=True)
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 626, in check_output
     **kwargs).stdout
     File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 708, in run
     output=stdout, stderr=stderr)
    subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

    subprocess.Popen(...)

    用于执行复杂的系统命令

    参数:

    args:shell命令,可以是字符串或者序列类型(如:list,元组)

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

    stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄

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

    close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。

    所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

    shell:同上

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

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

    universal_newlines:不同系统的换行符不同,True -> 同意使用 n

    startupinfo与createionflags只在windows下有效

    将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

    执行普通命令

    >>> import subprocess
    >>> ret1 = subprocess.Popen(["mkdir","t1"])
    >>> ret2 = subprocess.Popen("mkdir t2", shell=True)
    >>> print(ret1)
    <subprocess.Popen object at 0x7f4d7609dd30>
    >>> print(ret2)
    <subprocess.Popen object at 0x7f4d7609dc18>

    终端输入的命令分为两种:

  • 输入即可得到输出,如:ifconfig

  • 输入进行某环境,依赖再输入,如:python

  • >>> import subprocess
    >>> obj = subprocess.Popen("mkdir t3", shell=True, cwd='/tmp/',)
    >>> import subprocess
    >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    >>> obj.stdin.write("print(1)
    ")
    9
    >>> obj.stdin.write("print(2)")
    8
    >>> obj.stdin.close()
    >>> cmd_out = obj.stdout.read()
    >>> obj.stdout.close()
    >>> cmd_error = obj.stderr.read()
    >>> obj.stderr.close()
    >>> print(cmd_out)
    1
    2
    >>> print(cmd_error)
    >>> import subprocess
    >>> 
    >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    >>> obj.stdin.write("print(1)
    ")
    9
    >>> obj.stdin.write("print(2)")
    8
    >>> 
    >>> out_error_list = obj.communicate()
    >>> print(out_error_list)
    ('1
    2
    ', '')
    >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    >>> out_error_list = obj.communicate('print("hello")')
    >>> print(out_error_list)
    ('hello
    ', '')

    文档

    python中subprocess批量执行linux命令

    python中subprocess批量执行linux命令:本篇文章给大家详细讲述了python中使用subprocess批量执行linux命令的方法,有兴趣的朋友参考学习下。可以执行shell命令的相关模块和函数有:os.systemos.spawnos.popen --废弃popen --废弃commands --废弃,3.x中被移除以上执行shell命令
    推荐度:
    标签: 如何 linux 命令
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top