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

Python?運(yùn)行?shell?命令的方法匯總

 更新時(shí)間:2023年07月18日 08:35:12   作者:edisonfish  
這篇文章主要介紹了Python運(yùn)行shell命令的一些方法,我們來看一下 python 中有哪些自帶模塊或者方法可以實(shí)現(xiàn),對(duì)Python運(yùn)行shell命令感興趣的朋友跟隨小編一起看看吧

我們知道,python 在自動(dòng)化領(lǐng)域中被廣泛應(yīng)用,可以很好地自動(dòng)化處理一些任務(wù)

就比如編寫 Python 腳本自動(dòng)化執(zhí)行重復(fù)性的任務(wù),如文件處理、數(shù)據(jù)處理、系統(tǒng)管理等需要運(yùn)行其他程序或者與操作系統(tǒng)交互的任務(wù)

那么今天我們來看一下在 python 中如何運(yùn)行 shell 命令來與操作系統(tǒng)交互

一般來講,最好是用 python 自帶的函數(shù)或模塊,而不是直接調(diào)用其他程序或者操作系統(tǒng)的命令

我們來看一下 python 中有哪些自帶模塊或者方法可以實(shí)現(xiàn)

pathlib 模塊

如果你需要?jiǎng)?chuàng)建或者刪除文件/目錄,檢查文件是否存在或者改變權(quán)限等,你完全不需要使用操作系統(tǒng)的命令

你可以完全通過 pathlib 模塊來實(shí)現(xiàn),它有你需要的一切,甚至 globos.path 都可以不用

我們來簡單看一下關(guān)于這個(gè)模塊的例子

from pathlib import Path
# 創(chuàng)建一個(gè)Path對(duì)象表示當(dāng)前工作目錄
current_directory = Path.cwd()
print("當(dāng)前工作目錄:", current_directory)
# 創(chuàng)建一個(gè)新的目錄
new_directory = current_directory / "my_folder"
new_directory.mkdir()
print("創(chuàng)建新目錄:", new_directory)
# 創(chuàng)建一個(gè)新的文件
new_file = new_directory / "my_file.txt"
new_file.touch()
print("創(chuàng)建新文件:", new_file)
# 寫入文件
with new_file.open(mode='w') as f:
    f.write("Hello, World!")
# 讀取文件內(nèi)容
with new_file.open() as f:
    content = f.read()
print("文件內(nèi)容:", content)
# 遍歷目錄中的文件
for file in new_directory.iterdir():
    print("文件:", file)
# 刪除文件和目錄
new_file.unlink()
new_directory.rmdir()
print("刪除文件和目錄:", new_file, new_directory)

tempfile 模塊

在 Python 中臨時(shí)創(chuàng)建和處理文件時(shí),tempfile 模塊提供了方便的方法

它可以在臨時(shí)目錄中創(chuàng)建臨時(shí)文件和臨時(shí)文件夾,并提供了一些便利的函數(shù)和類來管理這些臨時(shí)文件

import tempfile
# 創(chuàng)建臨時(shí)文件
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.write(b'This is a temporary file.')
temp_file.close()
# 打印臨時(shí)文件路徑
print("臨時(shí)文件路徑:", temp_file.name)
# 打開臨時(shí)文件并讀取內(nèi)容
with open(temp_file.name, 'r') as f:
    content = f.read()
print("臨時(shí)文件內(nèi)容:", content)
# 創(chuàng)建臨時(shí)目錄
temp_dir = tempfile.TemporaryDirectory()
# 打印臨時(shí)目錄路徑
print("臨時(shí)目錄路徑:", temp_dir.name)
# 自動(dòng)清理臨時(shí)目錄
temp_dir.cleanup()

shutil 模塊

前面我們知道 pathlib 模塊滿足了 python 中大多數(shù)與文件相關(guān)的需求

如果需要例如復(fù)制,移動(dòng),刪除或創(chuàng)建文件,可以使用 shutil 模塊

import shutil
# 復(fù)制文件
shutil.copy('source_file.txt', 'destination_folder/')
# 移動(dòng)文件
shutil.move('source_file.txt', 'destination_folder/')
# 刪除文件
shutil.remove('file_to_be_deleted.txt')
# 刪除目錄
shutil.rmtree('directory_to_be_deleted/')
# 創(chuàng)建壓縮文件
shutil.make_archive('archive', 'zip', 'source_folder/')
# 解壓縮文件
shutil.unpack_archive('archive.zip', 'destination_folder/')

os 模塊

os 模塊是 Python 中一個(gè)更老的、更底層的模塊,提供了與操作系統(tǒng)交互和執(zhí)行文件系統(tǒng)操作的功能

但是隨著 python 的發(fā)展,越來越多面向?qū)ο蟮?、更直觀和易于使用的模塊可以供大家使用

對(duì)于 os 模塊,大家可以了解一下就行了

import os
print(os.getenv('PATH'))
# 獲取環(huán)境變量PATH的值,并打印
# 示例輸出:/home/martin/.local/bin:/usr/local/sbin:/usr/local/bin:...
print(os.uname())
# 獲取操作系統(tǒng)的信息,并打印
# 示例輸出:posix.uname_result(sysname='Linux', nodename='...', release='...', version='...', machine='x86_64')
print(os.times())
# 獲取進(jìn)程的CPU時(shí)間信息,并打印
# 示例輸出:posix.times_result(user=0.01, system=0.0, children_user=0.0, children_system=0.0, elapsed=1740.63)
print(os.cpu_count())
# 獲取可用的CPU核心數(shù)量,并打印
# 示例輸出:16
print(os.getloadavg())
# 獲取系統(tǒng)的平均負(fù)載,并打印
# 示例輸出:(2.021484375, 2.35595703125, 2.04052734375)
old_umask = os.umask(0o022)
# 設(shè)置文件創(chuàng)建時(shí)的權(quán)限掩碼,并將舊的掩碼保存起來
# 在此處可以執(zhí)行與文件相關(guān)的操作...
os.umask(old_umask)
# 恢復(fù)舊的文件權(quán)限掩碼

sh 模塊

sh 模塊不是 python 的標(biāo)準(zhǔn)模塊,它是一個(gè)第三方模塊,在使用之前我們需要安裝它

pip install sh
import sh
# 在 $PATH 中運(yùn)行任何命令...
print(sh.ls('-la'))
# 執(zhí)行l(wèi)s命令并打印輸出
# 示例輸出:
# total 36
# drwxrwxr-x  2 martin martin  4096 apr  8 14:18 .
# drwxrwxr-x 41 martin martin 20480 apr  7 15:23 ..
# -rw-rw-r--  1 martin martin    30 apr  8 14:18 examples.py
ls_cmd = sh.Command('ls')
print(ls_cmd('-la'))  # 顯式調(diào)用
# 使用Command對(duì)象執(zhí)行l(wèi)s命令并打印輸出
# 示例輸出與上述相同
# 如果命令不在PATH中:
custom_cmd = sh.Command('/path/to/my/cmd')
custom_cmd('some', 'args') # 執(zhí)行自定義命令并傳遞參數(shù)
with sh.contrib.sudo:
    # 使用'sudo'執(zhí)行一些操作...
    ...
# 使用'sudo'執(zhí)行一些操作的上下文環(huán)境

當(dāng)我們通過 sh 模塊去執(zhí)行一些 shell 命令時(shí),sh 模塊會(huì)嘗試在本地環(huán)境變量($PATH)中查找?guī)в性撁Q的內(nèi)置 shell 命令或二進(jìn)制文件

如果沒有找到,可以自己添加命令路徑

custom_cmd = sh.Command('/path/to/my/cmd')
custom_cmd('some', 'args')  # 執(zhí)行自定義命令并傳遞參數(shù)

如果要將命令的輸出寫入到文件里面,可以使用 _out 參數(shù)

#相當(dāng)于 ip address > /tmp/ipaddr
sh.ip.address(_out='/tmp/ipaddr')

我們?cè)谇?shell 命令時(shí)通常會(huì)使用到管道符(|),在 sh 模塊中通過 _in 參數(shù)來實(shí)現(xiàn)

print(sh.awk('{print $9}', _in=sh.ls('-la')))
# 等同于 "ls -la | awk '{print $9}'"
print(sh.wc('-l', _in=sh.ls('.', '-1')))
# 等同于  "ls -1 | wc -l"

對(duì)于異常處理,我們可以簡單地處理 ErrorReturnCode 或 TimeoutException 異常

try:
    sh.cat('/tmp/doesnt/exist')
except sh.ErrorReturnCode as e:
    print(f'Command {e.full_cmd} exited with {e.exit_code}')
    # '/usr/bin/cat /tmp/doesnt/exist' 命令結(jié)果返回 1
curl = sh.curl('https://httpbin.org/delay/5', _bg=True)
try:
    curl.wait(timeout=3)
except sh.TimeoutException:
    print("Command timed out...")
    curl.kill()

到此這篇關(guān)于Python 運(yùn)行 shell 命令的一些方法的文章就介紹到這了,更多相關(guān)Python 運(yùn)行 shell 命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python如何使用opencv提取光流詳解

    python如何使用opencv提取光流詳解

    這篇文章主要給大家介紹了關(guān)于python如何使用opencv提取光流的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù)

    Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù)

    今天小編就為大家分享一篇Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python爬蟲selenium驗(yàn)證之中文識(shí)別點(diǎn)選+圖片驗(yàn)證碼案例(最新推薦)

    Python爬蟲selenium驗(yàn)證之中文識(shí)別點(diǎn)選+圖片驗(yàn)證碼案例(最新推薦)

    本文介紹了如何使用Python和Selenium結(jié)合ddddocr庫實(shí)現(xiàn)圖片驗(yàn)證碼的識(shí)別和點(diǎn)擊功能,感興趣的朋友一起看看吧
    2025-02-02
  • Python中注釋(多行注釋和單行注釋)的用法實(shí)例

    Python中注釋(多行注釋和單行注釋)的用法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python中注釋(多行注釋和單行注釋)用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python hdbcli的使用小結(jié)

    Python hdbcli的使用小結(jié)

    hdbcli是連接SAPHANA數(shù)據(jù)庫的Python庫,提供數(shù)據(jù)庫交互功能,本文就來介紹一下Python hdbcli的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-09-09
  • Python編程把二叉樹打印成多行代碼

    Python編程把二叉樹打印成多行代碼

    這篇文章主要介紹了Python編程把二叉樹打印成多行代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • jupyter notebook清除輸出方式

    jupyter notebook清除輸出方式

    這篇文章主要介紹了jupyter notebook清除輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 在jupyter notebook中調(diào)用.ipynb文件方式

    在jupyter notebook中調(diào)用.ipynb文件方式

    這篇文章主要介紹了在jupyter notebook中調(diào)用.ipynb文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 基于python使用tibco ems代碼實(shí)例

    基于python使用tibco ems代碼實(shí)例

    這篇文章主要介紹了基于python使用tibco ems代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python入門指南之print()函數(shù)的N種高級(jí)用法

    Python入門指南之print()函數(shù)的N種高級(jí)用法

    這篇文章深入講解了Python中print()函數(shù)的高級(jí)用法,重點(diǎn)解析了其函數(shù)簽名和參數(shù)配置,文章通過豐富的代碼示例展示了print()函數(shù)的強(qiáng)大功能,幫助開發(fā)者突破簡單打印的局限,掌握更專業(yè)的輸出控制
    2026-06-06

最新評(píng)論

姜堰市| 汶上县| 泽普县| 泰来县| 定远县| 云霄县| 渝北区| 安义县| 凤冈县| 长沙市| 合肥市| 中阳县| 泾源县| 寻乌县| 稷山县| 尤溪县| 徐闻县| 奇台县| 桦川县| 永靖县| 仁怀市| 田林县| 汶上县| 乌拉特中旗| 石棉县| 浦北县| 邮箱| 绩溪县| 松溪县| 玉树县| 墨竹工卡县| 贵南县| 舒兰市| 衡山县| 林西县| 凤庆县| 衡南县| 措勤县| 精河县| 峨边| 泸溪县|