zoukankan      html  css  js  c++  java
  • subprocess

    [root@wesley ~]# python
    Python 2.7.14 (default, Sep 10 2018, 23:42:00)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    >>>
    >>> import subprocess
    >>> ret = subprocess.call('ls -l',shell=True)       #直接运行命令并打印 shell=True 表示程序将通过shell来执行
    total 20
    -rw-------. 1 root root  963 Jul  8 07:07 anaconda-ks.cfg
    -rw-r--r--. 1 root root 8845 Jul  8 07:07 install.log
    -rw-r--r--. 1 root root 3384 Jul  8 07:06 install.log.syslog
    >>> ret=subprocess.call('ls -l',shell=False)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/subprocess.py", line 168, in call
        return Popen(*popenargs, **kwargs).wait()
      File "/usr/local/lib/python2.7/subprocess.py", line 390, in __init__
        errread, errwrite)
      File "/usr/local/lib/python2.7/subprocess.py", line 1025, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    >>> subprocess.check_call('ls -l',shell=True)      #检查call 的执行命令,如果执行状态码是 0 ,则返回0,否则抛异常
    total 20
    -rw-------. 1 root root  963 Jul  8 07:07 anaconda-ks.cfg
    -rw-r--r--. 1 root root 8845 Jul  8 07:07 install.log
    -rw-r--r--. 1 root root 3384 Jul  8 07:06 install.log.syslog
    0
    >>> subprocess.check_call('exit 1',shell=True)          
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/subprocess.py", line 186, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
    >>> subprocess.check_output('echo','hello')    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/subprocess.py", line 212, in check_output
        process = Popen(stdout=PIPE, *popenargs, **kwargs)
      File "/usr/local/lib/python2.7/subprocess.py", line 339, in __init__
        raise TypeError("bufsize must be an integer")
    TypeError: bufsize must be an integer
    >>> subprocess.check_output(['echo','hello'])     #args 是一个字符串或者元祖,列表(统一在某一个里面)
    'hello
    '
    >>> subprocess.check_output('echo hello',shell=True)
    'hello
    '
    >>> ret1=subprocess.Popen('mkdir t2',shell=True)
    >>> subprocee.Popen('ls -l',shell=True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'subprocee' is not defined
    >>> subprocess.Popen('ls -l',shell=True)          #Popen执行命令
    <subprocess.Popen object at 0x7f5e8b43f850>
    >>> total 24
    -rw-------. 1 root root  963 Jul  8 07:07 anaconda-ks.cfg
    -rw-r--r--. 1 root root 8845 Jul  8 07:07 install.log
    -rw-r--r--. 1 root root 3384 Jul  8 07:06 install.log.syslog
    drwxr-xr-x. 2 root root 4096 Oct 16 03:15 t2
    
    >>> subprocess.Popen('ifconfig',shell=True)
    <subprocess.Popen object at 0x7f5e84f3dbd0>
    >>> eth0      Link encap:Ethernet  HWaddr 00:0C:29:04:FE:91
              inet addr:192.168.159.128  Bcast:192.168.159.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe04:fe91/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1477 errors:0 dropped:0 overruns:0 frame:0
              TX packets:715 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:129113 (126.0 KiB)  TX bytes:87399 (85.3 KiB)
    
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
    
    
    >>> obj=subprocess.Popen('python',stdin=subprocess.PIPE,      
    #在python 环境里面执行命令,
    注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,
    参数stdin必须被设置为PIPE。同样,
    如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 ... stdout
    =subprocess.PIPE,stderr=subprocess.PIPE, ... universal_newlines=True) >>> obj.stdin.write('print(1) ') >>> obj.stdin.write('print(2)') #写入数据 >>> 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) >>> obj=subprocess.Popen('python',stdin=subprocess.PIPE, ... stdout=subprocess.PIPE,stderr=subprocess.PIPE, ... universal_newlines=True) ... File "<stdin>", line 2 ... stdout=subprocess.PIPE,stderr=subprocess.PIPE, ^ SyntaxError: invalid syntax >>> File "<stdin>", line 1 ... universal_newlines=True) ^ SyntaxError: invalid syntax >>> import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) obj.stdin.write("print(1) ") obj.stdin.write("print(2)") out_error_list = obj.communicate() #取数据 print(out_error_list)>>> >>> >>> >>> >>> >>> >>> ('1 2 ', '') >>> import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) out_error_list = obj.communicate('print("hello")') #写入并取数据 obj.communicate(input) print(out_error_list)>>> >>> >>> >>> ('hello ', '') >>>
  • 相关阅读:
    FPGA边缘检测
    Luogu P5856 【「SWTR-03」Game】
    Luogu P4707 【重返现世】
    Weight Balanced Leafy Tree
    Luogu P4311 【士兵占领】
    Luogu P4174 【[NOI2006]最大获利】
    Luogu P1646 【[国家集训队]happiness】
    Luogu P4313 【文理分科】
    Luogu P4249 【[WC2007]剪刀石头布】
    Luogu P2754 【[CTSC1999]家园 / 星际转移问题】
  • 原文地址:https://www.cnblogs.com/wuxi9864/p/9912937.html
Copyright © 2011-2022 走看看