成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Python實現(xiàn)subprocess執(zhí)行外部命令

Python實現(xiàn)subprocess執(zhí)行外部命令

熱門標簽:公司電話機器人 廣告地圖標注app 哈爾濱ai外呼系統(tǒng)定制 陜西金融外呼系統(tǒng) 白銀外呼系統(tǒng) 唐山智能外呼系統(tǒng)一般多少錢 騰訊外呼線路 激戰(zhàn)2地圖標注 海南400電話如何申請

一、Python執(zhí)行外部命令

1、subprocess模塊簡介

subprocess 模塊允許我們啟動一個新進程,并連接到它們的輸入/輸出/錯誤管道,從而獲取返回值。

這個模塊用來創(chuàng)建和管理子進程。它提供了高層次的接口,用來替換os.system*()、 os.spawn*()、 os.popen*()、os,popen2.*()和commands.*等模塊和函數(shù)。

subprocess提供了一個名為Popen的類啟動和設置子進程的參數(shù),由于這個類比較復雜, subprocess還提供了若干便利的函數(shù),這些函數(shù)都是對Popen類的封裝。

2、subprocess模塊的遍歷函數(shù)

linux安裝ipython

pip3 install ipython

(1)call函數(shù)

call函數(shù)的定義如下:

subprocess.ca11(args, *, stdin=None, stdout=None, stderr=None, she11=False)
#運行由args參數(shù)提供的命令,等待命令執(zhí)行結(jié)束并返回返回碼。args參數(shù)由字符串形式提供且有多個命令參數(shù)時,需要提供shell=True參數(shù)
  • args:表示要執(zhí)行的命令。必須是一個字符串,字符串參數(shù)列表。
  • stdin、stdout 和 stderr:子進程的標準輸入、輸出和錯誤。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一個已經(jīng)存在的文件描述符、已經(jīng)打開的文件對象或者 None。subprocess.PIPE 表示為子進程創(chuàng)建新的管道。subprocess.DEVNULL 表示使用 os.devnull。默認使用的是 None,表示什么都不做。另外,stderr 可以合并到 stdout 里一起輸出。
  • shell:如果該參數(shù)為 True,將通過操作系統(tǒng)的 shell 執(zhí)行指定的命令。

示例代碼:

[root@python ~]# ipython      #啟動ipython
Python 3.8.1 (default, Mar  9 2020, 12:35:12) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import subprocess                #調(diào)用函數(shù)                        

In [2]: subprocess.call(['ls','-l'])    
drwxr-xr-x.  2 root root        6 10月 31 23:04 公共
drwxr-xr-x.  2 root root        6 10月 31 23:04 模板
drwxr-xr-x.  2 root root        6 10月 31 23:04 視頻
drwxr-xr-x.  2 root root     4096 10月 31 22:40 圖片
drwxr-xr-x.  2 root root        6 10月 31 23:04 文檔
drwxr-xr-x.  2 root root        6 10月 31 23:04 下載
drwxr-xr-x.  2 root root        6 10月 31 23:04 音樂
drwxr-xr-x.  2 root root        6 10月 31 15:27 桌面
Out[2]: 0

In [3]: subprocess.call('exit 1',shell=True)                 
Out[3]: 1

(2)check_call函數(shù)

check_call函數(shù)的作用與call函數(shù)類似,區(qū)別在于異常情況下返回的形式不同。

對于call函數(shù),工程師通過捕獲call命令的返回值判斷命令是否執(zhí)行成功,如果成功則返回0,否則的話返回非0,對于check_call函數(shù),如果執(zhí)行成功,返回0,如果執(zhí)行失敗,拋出subrocess.CalledProcessError異常。如下所示:

In [5]: subprocess.check_call(['ls','-l'])
drwxr-xr-x.  2 root root        6 10月 31 23:04 公共
drwxr-xr-x.  2 root root        6 10月 31 23:04 模板
drwxr-xr-x.  2 root root        6 10月 31 23:04 視頻
drwxr-xr-x.  2 root root     4096 10月 31 22:40 圖片
drwxr-xr-x.  2 root root        6 10月 31 23:04 文檔
drwxr-xr-x.  2 root root        6 10月 31 23:04 下載
drwxr-xr-x.  2 root root        6 10月 31 23:04 音樂
drwxr-xr-x.  2 root root        6 10月 31 15:27 桌面
Out[5]: 0

In [6]: subprocess.check_call('exit 1',shell=True)           
-------------------------------------------------------------
CalledProcessError          Traceback (most recent call last)
ipython-input-6-5e148d3ce640> in module>
----> 1 subprocess.check_call('exit 1',shell=True)

/usr/local/python381/lib/python3.8/subprocess.py in check_call(*popenargs, **kwargs)
    362         if cmd is None:
    363             cmd = popenargs[0]
--> 364         raise CalledProcessError(retcode, cmd)
    365     return 0
    366

CalledProcessError: Command 'exit 1' returned non-zero exit status 1.

(3)check_output

Python3中的subprocess.check_output函數(shù)可以執(zhí)行一條sh命令,并返回命令的輸出內(nèi)容,用法如下:

In [10]: output = subprocess.check_output(['df','-h'])       
In [11]: print(output.decode())                              
文件系統(tǒng)             容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root   17G  5.2G   12G   31% /
devtmpfs             473M     0  473M    0% /dev
tmpfs                489M   92K  489M    1% /dev/shm
tmpfs                489M  7.1M  482M    2% /run
tmpfs                489M     0  489M    0% /sys/fs/cgroup
/dev/sda1           1014M  173M  842M   18% /boot
tmpfs                 98M   16K   98M    1% /run/user/42
tmpfs                 98M     0   98M    0% /run/user/0
In [12]: lines = output.decode().split('\n')
In [13]: lines                                               
Out[13]: 
['文件系統(tǒng)             容量  已用  可用 已用% 掛載點',
 '/dev/mapper/cl-root   17G  5.2G   12G   31% /',
 'devtmpfs             473M     0  473M    0% /dev',
 'tmpfs                489M   92K  489M    1% /dev/shm',
 'tmpfs                489M  7.1M  482M    2% /run',
 'tmpfs                489M     0  489M    0% /sys/fs/cgroup',
 '/dev/sda1           1014M  173M  842M   18% /boot',
 'tmpfs                 98M   16K   98M    1% /run/user/42',
 'tmpfs                 98M     0   98M    0% /run/user/0',
 '']

In [14]: for line in lines[1:-1]: 
    ...:     if line: 
    ...:         print(line.split()[-2]) 
    ...: #截取掛載點數(shù)據(jù)                                                    
31%
0%
1%
2%
0%
18%
1%
0%

在子進程執(zhí)行命令,以字符串形式返回執(zhí)行結(jié)果的輸出。如果子進程退出碼不是0,拋出subprocess.CalledProcessError異常,異常的output字段包含錯誤輸出:

In [19]: try:
    ...:     output = subprocess.check_output(['df','-h']).decode()  #正確的
    ...: except subprocess.CalledProcessError as e:
    ...:     output = e.output
    ...:     code = e.returncode
//正確的沒有任何輸出

In [23]: try:
    ...:     output = subprocess.check_output(['wsd','-h'], stderr=subprocess.STDOUT)
    ...: .decode()                                                   #錯誤的
    ...: except subprocess.CalledProcessError as e:
    ...:     output = e.output
    ...:     code = e.returncode
    ...:    

//前面的錯誤代碼省略
FileNotFoundError: [Errno 2] No such file or directory: 'wsd'

3、subprocess模塊的Popen類(PyCharm)

實際上,我們上面的三個函數(shù)都是基于Popen()的封裝(wrapper)。這些封裝的目的在于讓我們?nèi)菀资褂米舆M程。當我們想要更個性化我們的需求的時候,就要轉(zhuǎn)向Popen類,該類生成的對象用來代表子進程。

  • subprocess模塊中基本的進程創(chuàng)建和管理由Popen類來處理
  • subprocess.popen是用來替代os.popen的
  • Popen 是 subprocess的核心,子進程的創(chuàng)建和管理都靠它處理。

構(gòu)造函數(shù):

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, 
startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(),
*, encoding=None, errors=None)

(1)常用參數(shù):
args:shell命令,可以是字符串或者序列類型(如:list,元組)
bufsize:緩沖區(qū)大小。當創(chuàng)建標準流的管道對象時使用,默認-1。

  • 0:不使用緩沖區(qū)
  • 1:表示行緩沖,僅當universal_newlines=True時可用,也就是文本模式
  • 正數(shù):表示緩沖區(qū)大小
  • 負數(shù):表示使用系統(tǒng)默認的緩沖區(qū)大小。

stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄
preexec_fn:只在 Unix 平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進程運行之前被調(diào)用
shell:如果該參數(shù)為 True,將通過操作系統(tǒng)的 shell 執(zhí)行指定的命令。
cwd:用于設置子進程的當前目錄。
env:用于指定子進程的環(huán)境變量。如果 env = None,子進程的環(huán)境變量將從父進程中繼承。

創(chuàng)建一個子進程,然后執(zhí)行一個簡單的命令:

>>> import subprocess
>>> p = subprocess.Popen('ls -l', shell=True)
>>> total 164
-rw-r--r--  1 root root   133 Jul  4 16:25 admin-openrc.sh
-rw-r--r--  1 root root   268 Jul 10 15:55 admin-openrc-v3.sh
...
>>> p.returncode
>>> p.wait()
0
>>> p.returncode
0

這里也可以使用 p = subprocess.Popen(['ls', '-cl']) 來創(chuàng)建子進程。

(2)Popen 對象的屬性

1> p.pid:
子進程的PID。

2> p.returncode:
該屬性表示子進程的返回狀態(tài),returncode可能有多重情況:

  • None —— 子進程尚未結(jié)束;
  • ==0 —— 子進程正常退出;
  • \&; 0—— 子進程異常退出,returncode對應于出錯碼;
  • 0—— 子進程被信號殺掉了。

3> p.stdin, p.stdout, p.stderr:
子進程對應的一些初始文件,如果調(diào)用Popen()的時候?qū)膮?shù)是subprocess.PIPE,則這里對應的屬性是一個包裹了這個管道的 file 對象。

(3)Popen 對象方法

  • poll(): 檢查進程是否終止,如果終止返回 returncode,否則返回 None。
  • wait(timeout): 等待子進程終止。
  • communicate(input,timeout): 和子進程交互,發(fā)送和讀取數(shù)據(jù)。
  • send_signal(singnal): 發(fā)送信號到子進程 。
  • terminate(): 停止子進程,也就是發(fā)送SIGTERM信號到子進程。
  • kill(): 殺死子進程。發(fā)送 SIGKILL 信號到子進程。

子進程的PID存儲在child.pid

import time
import subprocess

def cmd(command):
    subp = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8")
    subp.wait(2)
    if subp.poll() == 0:
        print(subp.communicate()[1])
    else:
        print("失敗")

cmd("java -version")
cmd("exit 1")

輸出結(jié)果如下:

java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)

失敗

(4)子進程的文本流控制
(沿用child子進程) 子進程的標準輸入,標準輸出和標準錯誤也可以通過如下屬性表示:

  • child.stdin
  • child.stdout
  • child.stderr

我們可以在Popen()建立子進程的時候改變標準輸入、標準輸出和標準錯誤,并可以利用subprocess.PIPE將多個子進程的輸入和輸出連接在一起,構(gòu)成管道(pipe):

import subprocess
child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE)
out = child2.communicate()
print(out)

執(zhí)行結(jié)果如下:

(b'      2      11      60\n', None)

subprocess.PIPE實際上為文本流提供一個緩存區(qū)。child1的stdout將文本輸出到緩存區(qū),隨后child2的stdin從該PIPE中將文本讀取走。child2的輸出文本也被存放在PIPE中,直到communicate()方法從PIPE中讀取出PIPE中的文本。

要注意的是,communicate()是Popen對象的一個方法,該方法會阻塞父進程,直到子進程完成。

我們還可以利用communicate()方法來使用PIPE給子進程輸入:

import subprocess
child = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
child.communicate("vamei".encode())

我們啟動子進程之后,cat會等待輸入,直到我們用communicate()輸入"vamei"。

通過使用subprocess包,我們可以運行外部程序。這極大的拓展了Python的功能。如果你已經(jīng)了解了操作系統(tǒng)的某些應用,你可以從Python中直接調(diào)用該應用(而不是完全依賴Python),并將應用的結(jié)果輸出給Python,并讓Python繼續(xù)處理。shell的功能(比如利用文本流連接各個應用),就可以在Python中實現(xiàn)。

4、使用python自動安i裝并啟動mongodb

PyCharm記得連接linux

簡易流程

  • Python自動化運維 --> 基于shell命令進行封裝
  • 編寫自動化腳本 --> 用Python語法封裝shell命令的執(zhí)行過程
  • python執(zhí)行shell命令 --> python外部命令
  • python函數(shù)執(zhí)行shell命令
  • os.system(cmd):執(zhí)行cmd指令
  • subprocess模塊
subprocess.call(['ls','-l'])
subprocess.call('ll' , shell=True)

運行成功: 返回0
運行失敗: 返回非0

subprocess. check_call (['ls',  '-l'])
subprocess. check_call ('ll', shell=True)

運行成功: 返回0
運行失敗: 返回CalledProcessError

subprocess. check_ output(['cat', 'apache.log'], stderr= subprocess.STDOUT)

運行成功:返回命令的輸出結(jié)果
運行失敗:自定義錯誤輸出stderr

subprocess模塊的Popen類

(1)PyCharm創(chuàng)建文件

# coding=utf-8
import subprocess
import os
import shutil
import tarfile

# 執(zhí)行外部命令的函數(shù)
def execute_cmd(cmd):
    '''執(zhí)行shell命令'''
    p = subprocess.Popen(cmd, shell=True,
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    stdout, stderr = p.communicate()
    if p.returncode != 0:
        return p.returncode, stderr
    return p.returncode, stdout

# 解壓
def unpackage_mongo(package, package_dir):
    # 獲取MongoDB壓縮包的主文件名,也就是解壓后的目錄名稱
    # mongodb-linux-x86_64-rhe170-4.2.3
    unpackage_dir = os.path.splitext(package)[0]
    if os.path.exists(unpackage_dir):
        shutil.rmtree(unpackage_dir)
    if os.path.exists(package_dir):
        shutil.rmtree(package_dir)
    # 解壓
    try:
        t = tarfile.open(package, 'r:gz')
        t.extractall('.')
        print('tar is ok.')
    except Exception as e:
        print(e)
    # 重命名
    shutil.move(unpackage_dir, 'mongo')

# 創(chuàng)建mongodata
def create_datadir(data_dir):
    if os.path.exists(data_dir):
        shutil.rmtree(data_dir)
    os.mkdir(data_dir)

# 拼接啟動MongoDB
def format_mongod_commamd(package_dir, data_dir, logfile):
    # mongo/bin/mongod
    mongod = os.path.join(package_dir, 'bin', 'mongod')
    # mongo/bin/mongod --fork --logpath mongodata/mongod.log --dbpath mongodata
    mongod_format = """{0} --fork --dbpath {1} --logpath {2}"""
    return mongod_format.format(mongod, data_dir, logfile)

# 啟動MongoDB
def start_mongod(cmd):
    returncode, out = execute_cmd(cmd)
    if returncode != 0:
        raise SystemExit('execute {0} error:{1}'.format(cmd, out))
    else:
        print('execute {0} successfuly.'.format(cmd))

#入口函數(shù)
def main():
    package = 'mongodb-linux-x86_64-rhel70-4.2.3.tgz'
    cur_dir = os.path.abspath('.')
    package_dir = os.path.join(cur_dir, 'mongo')
    data_dir = os.path.join(cur_dir, 'mongodata')
    logfile = os.path.join(data_dir, 'mongod.log')

    # 判斷MongoDB壓縮包是否存在
    if not os.path.exists(package):
        raise SystemExit('{0} not found.'.format(package))

    # 解壓
    unpackage_mongo(package, package_dir)
    create_datadir(data_dir)

    # 啟動mongodb
    start_mongod(format_mongod_commamd(package_dir, data_dir, logfile))

    # 配置環(huán)境變量
    os.system('echo "export PATH=./mongo/bin:$PATH" > ~/.bash_profile')
    os.system('source ~/.bash_profile')

    os.system('./mongo/bin/mongo')
main()

  • 在這段程序中,我們首先在main函數(shù)中定義了幾個變量,包括當前目錄的路徑、MongoDB二進制文件所在的路徑、MongoDB數(shù)據(jù)目錄所在的路徑,以及MongoDB的日志文件。
  • 隨后,我們判斷MongoDB的安裝包是否存在,如果不存在,則通過拋出SystemExit異常的方式結(jié)束程序。
  • 在unpackage_mongo函數(shù)中,我們通過Python程序得到MongoDB安裝包解壓以后的目錄。如果目錄已經(jīng)存在,則刪除該目錄。隨后,我們使用tarfile解MongoDB數(shù)據(jù)庫,解壓完成后,將命令重命名為mongo目錄。
  • 在create_datadir目錄中,我們首先判斷MongoDB數(shù)據(jù)庫目錄是否存在,如果存在,則刪除該目錄,隨后再創(chuàng)建MongoDB數(shù)據(jù)庫目錄。
  • 在start_mongod函數(shù)中, 我們執(zhí)行MongoDB數(shù)據(jù)庫的啟動命令啟動MongoDB數(shù)據(jù)庫。為了在Python代碼中執(zhí)行shell命令,我們使用了subprocess庫。 我們將subprocess庫執(zhí)行she11命令的邏輯封裝成execute_cmd函數(shù),在執(zhí)行shell命令時,直接調(diào)用該函數(shù)即可。

(2)將PyCharm中的文件上傳到Linux

如果,是直接調(diào)用Linux中文件可用:

如果是本地創(chuàng)建:

(3)Linux執(zhí)行腳本,并測試
記得進入PyCharm與linux連接的目錄(目前是/opt)

[root@python opt]# python auto_install_mongodb.py   #執(zhí)行提前編寫好的腳本
tar is ok.
execute /opt/mongo/bin/mongod --fork --dbpath /opt/mongodata --logpath /opt/mongodata/mongod.log successfuly.
[root@python opt]# netstat -anpt | grep mongo       #查看mongo是否啟動
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      4616mongod         
[root@python opt]# ls                               #查看是否生成mongo目錄
01find_cmd.py            bb.bmp     mongodb-linux-x86_64-rhel70-4.2.3.tgz
aaa.jpg                  cc.png     rh
adc.txt                  mongo      subprocess_demo
auto_install_mongodb.py  mongodata
[root@python opt]# cd mongo
[root@python mongo]# cd bin/
[root@python bin]# ./mongo                          #進入mongo
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabledgssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c302ff50-7e27-40b7-8046-8441af8cb965") }
MongoDB server version: 4.2.3

> show databases;                                  #查看數(shù)據(jù)庫
admin   0.000GB
config  0.000GB
local   0.000GB

到此這篇關于Python實現(xiàn)subprocess執(zhí)行外部命令的文章就介紹到這了,更多相關Python 執(zhí)行外部命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python實現(xiàn)系統(tǒng)交互(subprocess)
  • Python中使用subprocess庫創(chuàng)建附加進程
  • 解決python subprocess參數(shù)shell=True踩到的坑
  • Python中Subprocess的不同函數(shù)解析
  • python中subprocess實例用法及知識點詳解

標簽:鷹潭 黔西 益陽 上海 常德 四川 黑龍江 惠州

巨人網(wǎng)絡通訊聲明:本文標題《Python實現(xiàn)subprocess執(zhí)行外部命令》,本文關鍵詞  Python,實現(xiàn),subprocess,執(zhí)行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《Python實現(xiàn)subprocess執(zhí)行外部命令》相關的同類信息!
  • 本頁收集關于Python實現(xiàn)subprocess執(zhí)行外部命令的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    少妇精品视频一区二区免费看| 黄一区二区三区| 韩国女主播一区二区| 国产综合视频一区二区三区免费| 国产超碰在线播放| 日韩精品视频在线观看网址| 国产美女视频一区二区| 777久久久精品一区二区三区| 超碰超碰97| 久久福利一区| 国产精品伊人日日| 亚洲精品男人| 极品白嫩的小少妇| 六月丁香婷婷色狠狠久久| 搞黄视频在线观看| 凸凹人妻人人澡人人添| 日韩欧美一区视频| 青青草97国产精品麻豆| 亚洲这里只有精品| 亚洲春色综合另类校园电影| 欧美综合天天夜夜久久| 26uuu精品一区二区三区四区在线| 91亚洲精品视频| 国产视频九色蝌蚪| 国产精品一区二区三区四区在线观看| 伊人久久大香线蕉精品组织观看| 青青草华人在线视频| 激情小说中文字幕| 色婷婷亚洲综合| 免费女人黄页| 夜夜嗨aⅴ一区二区三区| 亚洲大肥女ass| 国产精品久久久久久久久久久久久久久久| 欧美性生交大片免费| 嫩草影院一区二区三区| 日韩精品福利视频| 国产精品一级| 欧美日韩一区综合| 人妻激情偷乱视频一区二区三区| 国产交换配乱淫视频免费| 国产男人精品视频| 国产直播在线| 久草福利在线| 麻豆传媒在线免费| 一区二区三区四区免费视频| 日韩一区在线视频| 成年人免费看毛片| 日韩中文字幕区一区有砖一区| 国户精品久久久久久久久久久不卡| 在线日韩av片| 在线观看的黄色网址| 污污的视频在线免费观看| 日本黄色www| www亚洲人| 周于希免费高清在线观看| 男女午夜刺激视频| 国产有码在线观看| 亚洲老司机av| 欧美国产一二三区| 神马一区二区三区| 国产女优裸体网站| 欧洲杯足球赛直播| shkd中文字幕久久在线观看| 亚洲最大av在线| 五月激情综合色| 色视频网站在线| 91资源在线播放| 韩国视频一区二区三区| 欧美一区二区三区在线观看视频| 在线观看视频欧美| 国产精品久久久久久久久夜色| 国产激情三区| 国产主播一区| 欧美在线播放高清精品| 国模极品一区二区三区| 成人午夜在线视频一区| 日韩在线国产精品| 不卡影院免费观看| 日韩欧美色电影| 久久久久久久久久久久久国产| 人妻激情偷乱视频一区二区三区| jizz18欧美18| 日韩精品你懂的| 一本色道久久88综合亚洲精品ⅰ| 久久av在线播放| 亚洲人成网站色在线观看| 中文字幕av影视| 欧美吞精做爰啪啪高潮| 欧美在线视频免费| 97人人模人人爽视频一区二区| 久久精品丝袜高跟鞋| 日韩精品一区第一页| 四虎影视在线观看2413| 成人网18免费看| 亚洲午夜激情网站| 精品久久久久久| 欧美一卡二卡在线| 美女视频黄的免费| www.91精品| 亚洲我射av| 成人免费视频视频在| 久久人人97超碰精品888| 国产日韩av在线| 亚洲精品久久久久久久久久久| 看全色黄大色大片免费久久久| 少妇av在线播放| 日本不卡一二三区| 人妻无码中文久久久久专区| 久久久久久久香蕉网| 色噜噜在线网| 男女全黄做爰文章| 欧美日韩亚洲视频一区| 日韩大片在线观看| 中文字字幕在线中文| 国产人妖ts一区二区| 一区二区三区 欧美| 欧美一区二区三区免费看| 伊人影院在线播放| 国产精品一区无码| 全球成人中文在线| 欧美色图一区| 日本在线一二三| 强开小嫩苞一区二区三区网站| 日韩视频免费看| 日本1区2区3区视频| 欧美人与性囗牲恔配| 99re热这里只有精品视频| 天堂日韩电影| 精品久久久久久久久久久久包黑料| 一区二区av| 乱色精品无码一区二区国产盗| 国产白浆在线观看| 精品视频一二三区| 亚洲欧美日韩精品久久久| 亚洲成人av中文字幕| 成人精品国产亚洲| 国产传媒视频在线观看| 一本色道久久hezyo无码| 这里是久久伊人| 午夜视频在线观看国产| 国产一区二区毛片| 污污视频网站免费观看| 每日在线观看av| 亲爱的老师6电影韩剧| 1024精品久久久久久久久| 淫片在线观看| 久久青青草原一区二区| 日本高清视频在线| 国产综合无码一区二区色蜜蜜| 一区二区日韩电影| 国产98色在线|日韩| 欧美极品美女视频| 欧美日韩精品在线播放| 久草视频观看| 国产精品麻豆| 日日噜噜夜夜狠狠视频| 亚洲人挤奶视频| 精品剧情在线观看| 大地资源高清播放在线观看| 久草手机在线视频| 一二三区精品福利视频| 日本一区免费看| 人妻人人澡人人添人人爽| 东京热加勒比无码少妇| 成人免费一区二区三区| 女人天堂av在线播放| 999香蕉视频| 欧美sm精品调教视频| 国产精品福利在线观看| 欧美午夜精品久久久| 中文字幕 欧美日韩| av在线不卡免费| 久久手机精品视频| 男女啪啪网站| 性做久久久久久免费观看| 日韩在线视频免费看| 91原创在线视频| 奇米影视四色在线| 亚洲最大福利网| 中文字幕一区二区三区日韩精品| 亚洲欧美一区二区三区情侣bbw| 成人免费福利视频| 亚洲一区图片| 日日夜夜免费精品视频| 中文字幕成人乱码在线电影| 国产又爽又黄网站亚洲视频123| yellow中文字幕久久| 国产精品中文字幕制服诱惑| 自拍偷自拍亚洲精品被多人伦好爽| 女人高潮被爽到呻吟在线观看| 国产原创精品视频| 久久久精品免费看| 蜜臀av色欲a片无码精品一区| 精品人伦一区二区三区蜜桃网站| 日韩网站免费观看| 在线免费观看av网| 国产精品揄拍500视频| 国产精品一区而去| sese在线视频| 欧美精品成人91久久久久久久| 日韩理论片一区二区| 日韩欧美精品在线视频| 国内视频精品| 日本精品一区在线观看| 九九热精品免费视频| 不卡视频免费在线观看| 91黄色在线看| 精品久久久久久久久久久久久久久久久久| 黄网站在线观看高清免费| 一个色综合网站| 国产成人精品一区二三区四区五区| 欧美一进一出视频| 色一情一交一乱一区二区三区| 久久久极品av| freee性欧美| 日本精品一二三区| 亚洲人成网www| 国产精品揄拍500视频| 懂色av成人一区二区三区| 亚洲综合二区| 三级黄色小视频| 男同互操gay射视频在线看| 大香煮伊手机一区| 日韩av大片站长工具| 欧美人妻精品一区二区三区| jjzz在线观看| 久久美女高清视频| 亚洲天堂视频在线观看| 亚洲色欲久久久综合网东京热| 99热6这里只有精品| 中文字幕一区二区精品区| 成人黄页在线观看| 中文字幕一区视频| 久久国产成人精品国产成人亚洲| 欧美日韩精品在线一区| 亚洲一区二区精品在线观看| 亚洲第一中文字幕在线观看| 在线观看国产网站| 国产成人一二片| 青青草视频导航| 久久综合国产精品台湾中文娱乐网| 日日噜噜夜夜狠狠久久波多野| 久久精品aⅴ无码中文字字幕重口| 国产精品美腿一区在线看| 黄色网页在线播放| av天在线观看| 久久久久久久免费视频了| 紧身裙女教师波多野结衣| 污污的网站在线免费观看| 精品一区二区三区中文字幕在线| 亚洲精品一区二区三区精华液| 免费成人av在线| 亚洲av无码国产精品久久| 欧美在线不卡视频| 欧美一区二区三区视频| 精品中文字幕一区| 国产精品国产三级国产有无不卡| 国产精品美女久久久久久久网站| 香港日本韩国三级| 一二三四在线视频观看社区| 久久久久久久极品内射| 国产wwwwwww| 91在线观看视频| 黄色一级片在线免费观看| 性欧美videos另类喷潮| 双性尿奴穿贞c带憋尿| 国产精品久久久久久69| 欧美大黑bbbbbbbbb在线| 精品久久久久久久久久久国产字幕| 国产在线看片| 欧美日韩激情一区二区三区| 久久99国产精品自在自在app| 日本一区视频在线播放| 国产亚洲精品一区二区在线观看| 免费无遮挡无码永久在线观看视频| 日皮视频在线观看| 色一色在线观看视频网站| 乱人伦精品视频在线观看| 国产69精品久久久久按摩| 欧美精品xx| 狠狠v欧美v日韩v亚洲ⅴ| 五月天av网站| 国产一区在线电影| 午夜剧场日韩| 国产成人综合欧美精品久久| 樱花草在线观看www| 国产日产欧美精品一区二区三区| 国产高潮流白浆喷水视频| 国产精品videossex久久发布| 一区二区三区日韩在线观看| 亚洲成a天堂v人片| 亚洲欧美综合国产精品一区| 久久超碰97人人做人人爱| 久久久久亚洲av无码网站| 日日摸夜夜添一区| 久久国产人妖系列| 国产亚洲精品久久久久久777| 伊人www22综合色| 国产主播在线一区| 欧美日韩123区| 欧美黄色一级片视频| 久久免费影院| 内射后入在线观看一区| 国产精品v日韩精品v欧美精品网站| 亚洲人成网亚洲欧洲无码| 久久躁狠狠躁夜夜爽| 一区二区三区亚洲变态调教大结局| 天天摸夜夜操| 激情丁香综合五月| 亚洲一区二区三区精品在线观看| 水莓100国产免费av在线播放| 日韩av在线一区| 欧美乱妇一区二区三区不卡视频| 性一交一乱一伧国产女士spa| 中国成人一区| 白浆视频在线观看| 自拍偷拍一区二区三区| 高清电影在线免费观看| 韩国v欧美v日本v亚洲v| 人人爱人人干婷婷丁香亚洲| 日本中文在线观看| 日本韩国欧美在线观看| 国产精品揄拍500视频| 538精品视频| 黄色片视频网站| 欧美精品乱码久久久久久| 亚洲 欧美 精品| 国产欧美精品国产国产专区|