最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python系統(tǒng)交互庫解析過程

 更新時(shí)間:2025年07月30日 09:58:41   作者:Sally璐璐  
本文介紹了Python中os、sys、subprocess等模塊及paramiko、Fabric、socket、requests等庫的核心功能,涵蓋文件操作、系統(tǒng)交互、進(jìn)程管理、網(wǎng)絡(luò)通信、數(shù)據(jù)處理等場(chǎng)景,并強(qiáng)調(diào)了安全使用YAML等格式的注意事項(xiàng)

系統(tǒng)交互庫

os 模塊

os 模塊提供了跨平臺(tái)的文件和目錄操作方法,是 Python 標(biāo)準(zhǔn)庫中最常用的系統(tǒng)接口之一:

文件操作

  • os.rename(src, dst) - 重命名文件或目錄
  • os.remove(path) - 刪除文件(不能刪除目錄)

os.path 子模塊提供:

  • os.path.exists(path) - 檢查路徑是否存在
  • os.path.isfile(path)/os.path.isdir(path) - 判斷路徑類型
  • os.path.getsize(path) - 獲取文件大小

目錄操作

  • os.mkdir(path) - 創(chuàng)建單個(gè)目錄
  • os.makedirs(path) - 遞歸創(chuàng)建多級(jí)目錄
  • os.listdir(path) - 列出目錄內(nèi)容
  • os.chdir(path) - 改變當(dāng)前工作目錄
  • os.walk(top) - 目錄樹生成器,遞歸遍歷

路徑處理

  • os.path.join(path1, path2) - 智能拼接路徑(跨平臺(tái)兼容)
  • os.path.abspath(path) - 獲取絕對(duì)路徑
  • os.path.dirname(path)/os.path.basename(path) - 獲取目錄名/文件名
  • os.path.splitext(path) - 分離文件名和擴(kuò)展名

系統(tǒng)信息

  • os.name - 操作系統(tǒng)名稱('posix', 'nt', 'java')
  • os.environ - 環(huán)境變量字典
  • os.getcwd() - 獲取當(dāng)前工作目錄
  • os.cpu_count() - 獲取CPU核心數(shù)

sys 模塊

sys 模塊實(shí)現(xiàn)了與 Python 解釋器的深度交互:

命令行參數(shù)

  • sys.argv - 腳本參數(shù)列表(第一個(gè)元素是腳本名稱)
  • 示例:python script.py arg1 arg2sys.argv = ['script.py', 'arg1', 'arg2']

模塊搜索路徑

  • sys.path - Python 模塊搜索路徑列表
  • 可動(dòng)態(tài)修改:sys.path.append('/custom/path')

標(biāo)準(zhǔn)輸入輸出

  • sys.stdin/sys.stdout/sys.stderr - 標(biāo)準(zhǔn) I/O 流對(duì)象
  • 重定向示例:
sys.stdout = open('output.log', 'w')
print("這將寫入文件")

解釋器信息

  • sys.version - Python 版本信息
  • sys.platform - 操作系統(tǒng)平臺(tái)標(biāo)識(shí)符
  • sys.executable - Python 解釋器路徑
  • sys.exit([status]) - 退出程序(0表示成功)

其他重要功能

  • sys.getsizeof(obj) - 獲取對(duì)象占用的內(nèi)存大小
  • sys.getrecursionlimit() - 獲取遞歸深度限制
  • sys.settrace() - 設(shè)置跟蹤函數(shù)用于調(diào)試

subprocess 模塊

subprocess 提供了更安全的進(jìn)程管理方式,替代傳統(tǒng)的 os.system():

基本用法

# 運(yùn)行簡(jiǎn)單命令
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)

# 檢查返回碼
if result.returncode != 0:
    print("命令執(zhí)行失敗")

高級(jí)控制

  • subprocess.Popen() - 創(chuàng)建子進(jìn)程并返回句柄
proc = subprocess.Popen(["python", "worker.py"], 
                       stdin=subprocess.PIPE,
                       stdout=subprocess.PIPE)

管道連接

  • subprocess.PIPE - 創(chuàng)建管道
p1 = subprocess.Popen(["cat", "file.txt"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", "keyword"], stdin=p1.stdout, stdout=subprocess.PIPE)

錯(cuò)誤處理

  • subprocess.CalledProcessError - 命令返回非零狀態(tài)時(shí)拋出
  • 安全執(zhí)行:
try:
    subprocess.run(["rm", "important_file"], check=True)
except subprocess.CalledProcessError as e:
    print(f"命令失敗: {e}")

其他功能

  • timeout 參數(shù) - 設(shè)置命令超時(shí)時(shí)間
  • shell=True - 通過系統(tǒng)shell執(zhí)行命令(有安全風(fēng)險(xiǎn))
  • env 參數(shù) - 設(shè)置子進(jìn)程環(huán)境變量

遠(yuǎn)程管理工具

paramiko 庫

paramiko 是純 Python 實(shí)現(xiàn)的 SSHv2 協(xié)議庫:

SSH 連接

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname', username='user', password='pass')

執(zhí)行命令

stdin, stdout, stderr = client.exec_command('ls -l')
print(stdout.read().decode())

文件傳輸

sftp = client.open_sftp()
sftp.put('local.txt', 'remote.txt')  # 上傳
sftp.get('remote.txt', 'local.txt')  # 下載
sftp.close()

密鑰認(rèn)證

key = paramiko.RSAKey.from_private_key_file('/path/to/key.pem')
client.connect('host', username='user', pkey=key)

高級(jí)功能

  • SSH 隧道
  • 保持連接
  • 主機(jī)密鑰驗(yàn)證
  • 交互式 shell

Fabric 工具

Fabric2 是新一代的批量任務(wù)框架,構(gòu)建在 Paramiko 之上:

任務(wù)定義

from fabric import task

@task
def deploy(c):
    c.run('git pull')
    c.run('pip install -r requirements.txt')

主機(jī)管理

@task
def check_disk(c):
    # 單個(gè)連接
    result = c.run('df -h', hide=True)
    print(f"磁盤使用:\n{result.stdout}")
    
    # 多主機(jī)
    for connection in c:
        with connection.cd('/var/log'):
            connection.run('ls -l')

批量執(zhí)行

from fabric import Connection, ThreadingGroup

hosts = ['web1', 'web2', 'db1']
group = ThreadingGroup(*hosts, user='admin')

result = group.run('hostname')
for connection, result in result.items():
    print(f"{connection.host}: {result.stdout.strip()}")

配置系統(tǒng)

  • fabric.yml 配置文件:
user: deploy
connect_kwargs:
  key_filename: /path/to/key.pem
hosts:
  - web1.example.com
  - web2.example.com
  • 或通過 Python 配置:
c = Connection('host', user='user', connect_kwargs={'password': 'pass'})

其他特性

  • 并行執(zhí)行
  • 失敗處理
  • 上下文管理器
  • 本地和遠(yuǎn)程操作混合

網(wǎng)絡(luò)通信庫

socket 模塊

socket 提供底層網(wǎng)絡(luò)接口:

TCP 通信

# 服務(wù)器端
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 8000))
server_socket.listen(1)
conn, addr = server_socket.accept()

# 客戶端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8000))

UDP 通信

# 服務(wù)器端
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('0.0.0.0', 8000))
data, addr = udp_socket.recvfrom(1024)

# 客戶端
udp_socket.sendto(b'Hello', ('localhost', 8000))

常用方法

  • socket.settimeout() - 設(shè)置超時(shí)時(shí)間
  • socket.getaddrinfo() - 地址解析
  • socket.gethostname() - 獲取主機(jī)名
  • socket.shutdown() - 優(yōu)雅關(guān)閉連接

高級(jí)功能

  • 非阻塞 I/O
  • 套接字選項(xiàng)設(shè)置
  • 多路復(fù)用 (select/poll)
  • SSL 包裝

requests 庫

requests 提供了人性化的 HTTP 客戶端:

簡(jiǎn)單請(qǐng)求

# GET 請(qǐng)求
response = requests.get('https://api.example.com/data')
print(response.json())

# POST 請(qǐng)求
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://api.example.com/post', data=payload)

參數(shù)傳遞

  • params - URL 查詢參數(shù)
requests.get('https://api.example.com/search', params={'q': 'python'})
  • json - JSON 請(qǐng)求體
requests.post('https://api.example.com/data', json={'key': 'value'})

會(huì)話保持

session = requests.Session()
session.get('https://example.com/login', auth=('user', 'pass'))
response = session.get('https://example.com/dashboard')

高級(jí)功能

  • 代理支持:
proxies = {'http': 'http://proxy.example.com:8080'}
requests.get('http://example.com', proxies=proxies)
  • 超時(shí)設(shè)置:
requests.get('http://example.com', timeout=5)
  • SSL 驗(yàn)證:
requests.get('https://example.com', verify='/path/to/cert.pem')

響應(yīng)處理

  • response.status_code - HTTP 狀態(tài)碼
  • response.headers - 響應(yīng)頭
  • response.content - 二進(jìn)制響應(yīng)體
  • response.text - 文本響應(yīng)體
  • response.json() - JSON 解析

數(shù)據(jù)處理工具

json 模塊

json 模塊用于 API 數(shù)據(jù)交互:

序列化

data = {'name': 'Alice', 'age': 30, 'skills': ['Python', 'SQL']}
json_str = json.dumps(data, indent=2)  # 美化輸出

反序列化

data = json.loads('{"name": "Alice", "age": 30}')

文件操作

# 寫入文件
with open('data.json', 'w') as f:
    json.dump(data, f)

# 讀取文件
with open('data.json') as f:
    data = json.load(f)

高級(jí)功能

  • 自定義編碼器:
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

json.dumps(obj, cls=CustomEncoder)
  • 解析參數(shù):
json.loads(json_str, object_hook=my_decoder)

csv 模塊

csv 模塊用于報(bào)表生成:

讀取 CSV

with open('data.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

寫入 CSV

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Name', 'Age'])
    writer.writerow(['Alice', 30])

字典格式

# 讀取
with open('data.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['Name'], row['Age'])

# 寫入
with open('output.csv', 'w') as f:
    fieldnames = ['Name', 'Age']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'Name': 'Alice', 'Age': 30})

方言支持

csv.register_dialect('mydialect', delimiter='|', quoting=csv.QUOTE_MINIMAL)
with open('data.psv') as f:
    reader = csv.reader(f, dialect='mydialect')

yaml 模塊

yaml 用于配置文件解析:

基本用法

import yaml

# 解析 YAML
with open('config.yaml') as f:
    config = yaml.safe_load(f)

# 生成 YAML
data = {'server': {'host': '127.0.0.1', 'port': 8000}}
yaml_str = yaml.dump(data, default_flow_style=False)

高級(jí)特性

  • 錨點(diǎn)和別名:
defaults: &defaults
  adapter: postgres
  host: localhost

development:
  <<: *defaults
  database: dev
  • 自定義標(biāo)簽
  • 多文檔流

安全考慮

  • 始終優(yōu)先使用 yaml.safe_load() 而非 yaml.load()
  • 避免加載不受信任的 YAML 文件
  • 復(fù)雜對(duì)象需要自定義表示器/構(gòu)造器

與其他格式對(duì)比

  • 比 JSON 更易讀
  • 支持注釋
  • 比 XML 更簡(jiǎn)潔
  • 適合配置文件和復(fù)雜數(shù)據(jù)結(jié)構(gòu)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python新手入門之解釋器的安裝

    Python新手入門之解釋器的安裝

    相信有很多小伙伴還不會(huì)安裝Python解釋器,今天特地整理了本篇文章,文章有非常詳細(xì)的圖文示例,對(duì)不會(huì)安裝的小伙伴很有幫助,需要的朋友可以參考下
    2021-06-06
  • 一文詳解Python數(shù)據(jù)類型:數(shù)字、布爾與None的語義

    一文詳解Python數(shù)據(jù)類型:數(shù)字、布爾與None的語義

    在 Python 中,一切皆對(duì)象,每個(gè)對(duì)象都屬于特定的數(shù)據(jù)類型,理解數(shù)據(jù)類型的特性和行為是編寫高質(zhì)量 Python 代碼的關(guān)鍵,本文將深入探討 Python 的核心數(shù)據(jù)類型:數(shù)字、布爾值和 None,揭示它們背后的設(shè)計(jì)哲學(xué)和使用技巧
    2025-11-11
  • Python采集C站熱榜數(shù)據(jù)實(shí)戰(zhàn)示例

    Python采集C站熱榜數(shù)據(jù)實(shí)戰(zhàn)示例

    這篇文章主要為大家介紹了Python采集C站熱榜數(shù)據(jù)實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 基于Pandas讀取csv文件Error的總結(jié)

    基于Pandas讀取csv文件Error的總結(jié)

    今天小編就為大家分享一篇基于Pandas讀取csv文件Error的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python日志打印里logging.getLogger源碼分析詳解

    Python日志打印里logging.getLogger源碼分析詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于Python logging.getLogger源碼分析的相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • Python網(wǎng)絡(luò)編程之TCP套接字簡(jiǎn)單用法示例

    Python網(wǎng)絡(luò)編程之TCP套接字簡(jiǎn)單用法示例

    這篇文章主要介紹了Python網(wǎng)絡(luò)編程之TCP套接字簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了TCP套接字的功能及客戶端、服務(wù)器端具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-04-04
  • python中退出多層循環(huán)的方法

    python中退出多層循環(huán)的方法

    這篇文章主要介紹了python中退出多層循環(huán)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Python Django模板系統(tǒng)詳解

    Python Django模板系統(tǒng)詳解

    這篇文章主要介紹Django模板系統(tǒng)Django模板系統(tǒng)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • Python實(shí)戰(zhàn)之MNIST手寫數(shù)字識(shí)別詳解

    Python實(shí)戰(zhàn)之MNIST手寫數(shù)字識(shí)別詳解

    MNIST數(shù)據(jù)集是機(jī)器學(xué)習(xí)領(lǐng)域中非常經(jīng)典的一個(gè)數(shù)據(jù)集,由60000個(gè)訓(xùn)練樣本和10000個(gè)測(cè)試樣本組成,每個(gè)樣本都是一張28 * 28像素的灰度手寫數(shù)字圖片。本文主要介紹了通過 MNIST實(shí)現(xiàn)手寫數(shù)字識(shí)別,需要的可以參考一下
    2022-01-01
  • 使用Python+Bright Data MCP實(shí)時(shí)抓取Google搜索結(jié)果完整教程

    使用Python+Bright Data MCP實(shí)時(shí)抓取Google搜索結(jié)果完整教程

    在 AI 應(yīng)用和智能代理(Agent)的開發(fā)中,實(shí)時(shí)性數(shù)據(jù)往往是決定效果的關(guān)鍵,但傳統(tǒng)的網(wǎng)頁數(shù)據(jù)獲取方式存在明顯痛點(diǎn),而 Bright Data 的 Web MCP Server正好可以解決這些問題,本文就給大家介紹了使用Python+Bright Data MCP實(shí)時(shí)抓取Google搜索結(jié)果完整教程
    2025-08-08

最新評(píng)論

富蕴县| 阿拉善右旗| 甘孜| 镶黄旗| 宜章县| 尚志市| 广汉市| 普宁市| 陕西省| 安化县| 广灵县| 宜兴市| 青阳县| 绥芬河市| 肇庆市| 六枝特区| 通许县| 沽源县| 昌平区| 亚东县| 凉城县| 吉木萨尔县| 合江县| 巴彦县| 永胜县| 乌鲁木齐市| 西峡县| 南郑县| 拉萨市| 翁源县| 滦南县| 紫金县| 个旧市| 武功县| 彩票| 延寿县| 铜鼓县| 惠来县| 从化市| 英山县| 岚皋县|