zoukankan      html  css  js  c++  java
  • popen

    os.system

    执行的命令为打印,返回值为0或1

    >>> a=os.system('ls')
    usage
    0
    >>> 
    >>> a   #a的返回值为命令状态
    0
    >>> 

    os.popen

    可以保存返回值,无法保存返回值

    >>> a=os.popen('df -h')
    >>> 
    >>> a.read()
    'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    '
    >>> 

    subprocess

    subprocess.run

    >>> a=subprocess.run(['df','-h'],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True)
    >>> 
    >>> 
    >>> a
    CompletedProcess(args=['df', '-h'], returncode=0, stdout=b'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    ', stderr=b'')
    >>> 
    >>> 

    涉及到管道 用shell=True,此时返回值returncode=0

    >>> a=subprocess.run('df -h | grep dev',shell=True)
    udev            918M     0  918M   0% /dev
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    >>> 
    >>> a
    CompletedProcess(args='df -h | grep dev', returncode=0)
    >>> 
    >>> a=subprocess.run(['df','-h']) 
    Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    >>> 
    >>> 
    >>> a
    CompletedProcess(args=['df', '-h'], returncode=0)
    >>> 
    >>> 

    即不用列表形式,需要指定shell=True。

     stdout与stderr ,是否shell=True不影响

    >>> a=subprocess.run(['df','-h'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    >>> a
    CompletedProcess(args=['df', '-h'], returncode=0, stdout=b'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    ', stderr=b'')
    >>> 
    >>> 
    >>> 
    >>> a.stdout
    b'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    '
    >>> 
    >>> 
    
    
    
    
    >>> a=subprocess.run('df -h',stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
    >>> a
    CompletedProcess(args='df -h', returncode=0, stdout=b'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    ', stderr=b'')

     subprocess.getstatusoutput

    >>> a=subprocess.getstatusoutput('df -h')
    >>> a
    (0, 'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000')
    >>> 

     subprocess.Popen

     比较

     run方法阻塞10秒,  Popen非阻塞,可以用poll来查看是否执行完,

    >>> a=subprocess.run('sleep 10',stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
    >>> 
    >>> a=subprocess.Popen('sleep 10',stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)   
    >>> a.poll()
    >>> 
    >>> a.poll()
    >>> 
    >>> a.poll()
    0
    >>> 

    获取结果方法发生改变

    >>> a=subprocess.Popen('df -h',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    >>> 
    >>> 
    >>> a.stdout.read()
    b'Filesystem      Size  Used Avail Use% Mounted on
    udev            918M     0  918M   0% /dev
    tmpfs           188M   20M  168M  11% /run
    /dev/vda1        50G  2.4G   45G   6% /
    tmpfs           937M   24K  937M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           937M     0  937M   0% /sys/fs/cgroup
    tmpfs           188M     0  188M   0% /run/user/1000
    '
    >>> 
    >>> dir(a)
    ['__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_check_timeout', '_child_created', '_closed_child_pipe_fds', '_communicate', '_communication_started', '_execute_child', '_get_devnull', '_get_handles', '_handle_exitstatus', '_input', '_internal_poll', '_remaining_time', '_save_input', '_stdin_write', '_translate_newlines', '_try_wait', '_waitpid_lock', 'args', 'communicate', 'kill', 'pid', 'poll', 'returncode', 'send_signal', 'stderr', 'stdin', 'stdout', 'terminate', 'universal_newlines', 'wait']
    >>> 

    设置cwd

    >>> a=subprocess.Popen('echo $PWD',shell=True,cwd='/tmp',stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    >>> a
    <subprocess.Popen object at 0x7f8fcef8beb8>
    >>> a.stdout.read()
    b'/tmp
    '
    >>> 

    a.wait()

    a.pid

    a.terminate()

    a.kill()    # 类似kill -9

    import signal

    a.kill(1234,signal.SIGTERM)

    其他参数  

    check=True   若命令有误,直接报错。 不加此参数时,不报错,返回returncode和stderr。

  • 相关阅读:
    5+ App开发Native.js入门指南
    uni-app vue-cli命令行
    本地uni-app原生插件提交云端打包
    编写package.json文件
    生成插件包
    无障碍角色 accessibilityRole (iOS, Android)
    ajax 整理
    Javascript分享笔记
    echarts 横坐标分行展示,以及文字显示顶部
    js总结(11)js作用域
  • 原文地址:https://www.cnblogs.com/infaaf/p/8858688.html
Copyright © 2011-2022 走看看