美文网首页
python subprocess ,service

python subprocess ,service

作者: Caca哒 | 来源:发表于2018-03-08 11:35 被阅读0次
    多指令 是否阻塞 返回类型 推荐使用
    os.system 支持 阻塞 returncode
    subprocess Popen 支持 根据参数灵活调整 returncode,stdout,stderr 推荐
    call 支持 阻塞 returncode
    check_call 支持 非阻塞 returncode 推荐
    check_output 支持 非阻塞 stdout 推荐
    getoutput 不支持 阻塞 stdout
    getstatusoutput 不支持 阻塞 returncode,stdout

    Help on module subprocess:

    NAME

    subprocess - Subprocesses with accessible I/O streams
    

    DESCRIPTION

    This module allows you to spawn processes, connect to their
    input/output/error pipes, and obtain their return codes.
    
    For a complete description of this module see the Python documentation.
    
    Main API
    ========
    run(...): Runs a command, waits for it to complete, then returns a
              CompletedProcess instance.
    Popen(...): A class for flexibly executing a command in a new process
    
    Constants
    ---------
    DEVNULL: Special value that indicates that os.devnull should be used
    PIPE:    Special value that indicates a pipe should be created
    STDOUT:  Special value that indicates that stderr should go to stdout
    
    
    Older API
    =========
    call(...): Runs a command, waits for it to complete, then returns
        the return code.
    check_call(...): Same as call() but raises CalledProcessError()
        if return code is not 0
    check_output(...): Same as check_call() but returns the contents of
        stdout instead of a return code
    getoutput(...): Runs a command in the shell, waits for it to complete,
        then returns the output
    getstatusoutput(...): Runs a command in the shell, waits for it to complete,
        then returns a (status, output) tuple
    
    
    import os
    import sys
    import signal
    import psutil
    import time
    import subprocess
    
    if __name__ == '__main__':
    
        oo = ['cd', os.path.abspath('.'),
              '&&',
              'dir',
              '&&'
              ]
    
        process_cmd = ' '.join(oo)
        # outputstatus= subprocess.check_call(process_cmd, shell=True)
        # print("return", outputstatus)
        
        pro = subprocess.Popen(process_cmd,  stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                               shell=True)
        returncode = pro.poll()
        while returncode is None:
            returncode = pro.poll()
    
        back_data = dict(
            pid=pro.pid,
            output_lines=pro.stdout.readlines(),
            error_lines=pro.stderr.readlines())
    
        # os.kill(back_data['pid'], signal.SIGTERM)
    
        print("back \npid {pid} \noutput_lines {output_lines} \nerror_lines {error_lines}".format(
            **back_data))
        
    

    关闭进程及子进程相关相关

    
    import os 
    import psutil
    
    process = psutil.Process(back_data.get('pid'))
    process_children = process.children(recursive=True)
    print([{"pid": child.pid, "status": child.status(), "name": child.name()}
               for child in process_children])
    os.kill(back_data['pid'], signal.SIGTERM)
       
    

    关闭与名字匹配的进程

    
    import psutil
    
    def kill_process(name):
       """search process ,kill process by name """
        kill_pids = []
        try:
            for process in psutil.process_iter():
                if name == process.name():
                    kill_pids.append(process.pid)
        except psutil.NoSuchProcess:
            pass
        [os.kill(kill_pid, signal.SIGTERM) for kill_pid in kill_pids]
        
    
    

    相关文章

      网友评论

          本文标题:python subprocess ,service

          本文链接:https://www.haomeiwen.com/subject/rtiefftx.html