subprocess.Popen模块
该类用于在一个新的进程中执行一个子程序。subprocess模块底层的进程创建和管理是由Popen类来处理的。 1.subprocess.Popen的构造函数 class subprocess.Popen(args,bufsize=-1,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=True,shell=False,cwd=None,env=None,universal_newlines=False,startup_info=None,creationflags=0,restore_signals=True,start_new_session=False,pass_fds=()) 参数说明: 2. subprocess.Popen类的实例可调用的方法
?? 关于communicate()方法的说明: 该方法中的可选参数 input 应该是将被发送给子进程的数据,如果没有数据发送给子进程,该参数应该是None。input参数的数据类型必须是字节串,如果universal_newlines参数值为True,则input参数的数据类型必须是字符串。 该方法返回一个元组(stdout_data,stderr_data),这些数据将会是字节串或字符串(如果universal_newlines的值为True)。 需要注意的是,这里读取的数据是缓冲在内存中的,所以,如果数据大小非常大或者是无限的,就不应该使用这个方法。 3. subprocess.Popen使用实例 实例1: >>> import subprocess >>> >>> p = subprocess.Popen(‘df -Th‘,stdout=subprocess.PIPE,shell=True) >>> print(p.stdout.read()) Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 40G 12G 26G 31% / devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs tmpfs 3.9G 386M 3.5G 10% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs tmpfs 783M 0 783M 0% /run/user/0 tmpfs tmpfs 783M 0 783M 0% /run/user/1000 ? 实例2: >>> obj = subprocess.Popen(["python"],stdin=subprocess.PIPE,stderr=subprocess.PIPE) >>> obj.stdin.write(‘print(1) n‘) >>> obj.stdin.write(‘print(2) n‘) >>> obj.stdin.write(‘print(3) n‘) >>> out,err = obj.communicate() >>> print(out) 1 2 3 >>> print(err) ? 实例3: >>> obj = subprocess.Popen(["python"],stderr=subprocess.PIPE) >>> out,err = obj.communicate(input=‘print(1) n‘) >>> print(out) 1 >>> print(err) ? 实例4: >>> p1 = subprocess.Popen([‘df‘,‘-Th‘],stdout=subprocess.PIPE) >>> p2 = subprocess.Popen([‘grep‘,‘data‘],stdin=p1.stdout,stdout=subprocess.PIPE) >>> out,err = p2.communicate() >>> print(out) /dev/vdb1 ext4 493G 4.8G 463G 2% /data /dev/vdd1 ext4 1008G 420G 537G 44% /data1 /dev/vde1 ext4 985G 503G 432G 54% /data2 >>> print(err) None ? 实例5: import subprocess ‘‘‘ sh-3.2# ls /Users/egon/Desktop |grep txt$ mysql.txt tt.txt 事物.txt ‘‘‘ res1=subprocess.Popen(‘ls /Users/jieli/Desktop |grep txt$‘,shell=True,stdout=subprocess.PIPE) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |