国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python調(diào)用Shell命令 (python,shell 混合編程)

這篇具有很好參考價(jià)值的文章主要介紹了Python調(diào)用Shell命令 (python,shell 混合編程)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Python經(jīng)常被稱作“膠水語(yǔ)言”,因?yàn)樗軌蜉p易地操作其他程序,輕易地包裝使用其他語(yǔ)言編寫的庫(kù),也當(dāng)然可以用Python調(diào)用Shell命令。

用Python調(diào)用Shell命令有如下幾種方式:

1. os.system

os.system("The command you want").
os.system("lscpu").
os.system("ls -al").

這個(gè)調(diào)用相當(dāng)直接,且是同步進(jìn)行的,程序需要阻塞并等待返回。返回值是依賴于系統(tǒng)的,直接返回系統(tǒng)的調(diào)用返回值,所以windows和linux是不一樣的。

2. os.popen

os.popen(command[,mode[,bufsize]])

python調(diào)用shell命令,python,linux,開(kāi)發(fā)語(yǔ)言,深度學(xué)習(xí),學(xué)習(xí)

可以看出,popen方法通過(guò)p.read()獲取終端輸出,而且popen需要關(guān)閉close().當(dāng)執(zhí)行成功時(shí),close()不返回任何值,失敗時(shí),close()返回系統(tǒng)返回值. 可見(jiàn)它獲取返回值的方式和os.system不同。

3. 使用commands ( python3失效)

根據(jù)你需要的不同,commands模塊有三個(gè)方法可供選擇。getstatusoutput, getoutput, getstatus。

commands.getstatusoutput(cmd) 返回(status, output).
commands.getoutput(cmd) 只返回輸出結(jié)果
commands.getstatus(file) 返回ls -ld file的執(zhí)行結(jié)果字符串,調(diào)用了getoutput,不建議使用此方法

但是,如上三個(gè)方法都不是Python推薦的方法,而且在Python3中其中兩個(gè)已經(jīng)消失。

4. subprocess《Python文檔中目前全力推薦》

subprocess使用起來(lái)同樣簡(jiǎn)單:

直接調(diào)用命令,返回值即是系統(tǒng)返回。shell=True表示命令最終在shell中運(yùn)行。Python文檔中出于安全考慮,不建議使用shell=True。建議使用Python庫(kù)來(lái)代替shell命令,或使用pipe的一些功能做一些轉(zhuǎn)義。官方的出發(fā)點(diǎn)是好的,不過(guò)真心麻煩了很多, so....

但是,我使用subprocess失敗了

>>> import subprocess
>>> subprocess.call("cat %s |grep %s > %s " % ("/home/www/running/os-app-api/nohup.out","2019-10-28","~/nohup-2019-10-28.out"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.6/subprocess.py", line 287, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib64/python3.6/subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "/usr/lib64/python3.6/subprocess.py", line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'cat /home/www/running/os-app-api/nohup.out |grep 2019-10-28 > ~/nohup-2019-10-28.out ': 'cat /home/www/running/os-app-api/nohup.out |grep 2019-10-28 > ~/nohup-2019-10-28.out '

python調(diào)用shell命令,python,linux,開(kāi)發(fā)語(yǔ)言,深度學(xué)習(xí),學(xué)習(xí)

但是,可以直接運(yùn)行在shell里面:

python調(diào)用shell命令,python,linux,開(kāi)發(fā)語(yǔ)言,深度學(xué)習(xí),學(xué)習(xí)

同樣的 我用os.system 去運(yùn)行,也確實(shí)產(chǎn)生了。

>>> import os
>>> os.system("cat %s |grep %s > %s " % ("/home/www/running/os-app-api/nohup.out","2019-10-28","~/nohup-2019-10-28.out"))
256

源碼研究:

python調(diào)用shell命令,python,linux,開(kāi)發(fā)語(yǔ)言,深度學(xué)習(xí),學(xué)習(xí)

這里面最為重要的幾個(gè)參數(shù)是:.
args:要執(zhí)行的shell命令,或者是命令的列表;
bufsize:緩沖區(qū)大??;。
stdin、stdout、stderr:表示程序的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出以及錯(cuò)誤輸出。
shell:是否直接執(zhí)行命令,如果設(shè)置為True就表示可以直接執(zhí)行;
cwd:當(dāng)前的工作目錄;
env:子進(jìn)程環(huán)境變量;

python調(diào)用shell命令,python,linux,開(kāi)發(fā)語(yǔ)言,深度學(xué)習(xí),學(xué)習(xí)

subprocess模塊里面還有一項(xiàng)功能比較強(qiáng)大的支持在于可以直接使用標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出進(jìn)行進(jìn)程的數(shù)據(jù)通訊操作。

例如,在Python安裝完成之后都會(huì)存在有交互式的編程環(huán)境,那么本次將通過(guò)程序調(diào)用交互式編程環(huán)境直接操作python命令行,在python命令行中直接輸入程序。

def main():
subp_popen=subprocess.Popen("python.exe",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
subp_popen.stdin.write("print('subp_popen.stdin.write1')\n".encode())
subp_popen.stdin.write("print('subp_popen.stdin.write2')\n".encode())
subp_popen.stdin.write(("print('subp_popen.stdin.write3'+1)").encode())
subp_popen.stdin.close()
cmd_out=subp_popen.stdout.read()
subp_popen.stdout.close()
print(cmd_out.decode())
cmd_err=subp_popen.stderr.read()
subp_popen.stderr.close()
print(cmd_err)
if __name__ == '__main__':
main()

python調(diào)用shell命令,python,linux,開(kāi)發(fā)語(yǔ)言,深度學(xué)習(xí),學(xué)習(xí)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-600339.html

到了這里,關(guān)于Python調(diào)用Shell命令 (python,shell 混合編程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Linux shell編程學(xué)習(xí)筆記41:lsblk命令

    Linux shell編程學(xué)習(xí)筆記41:lsblk命令

    邊緣計(jì)算面臨著數(shù)據(jù)安全與隱私保護(hù)、網(wǎng)絡(luò)穩(wěn)定性等挑戰(zhàn),但同時(shí)也帶來(lái)了更強(qiáng)的實(shí)時(shí)性和本地處理能力,為企業(yè)降低了成本和壓力,提高了數(shù)據(jù)處理效率。因此,邊緣計(jì)算既帶來(lái)了挑戰(zhàn)也帶來(lái)了機(jī)遇,需要我們不斷地研究 前幾節(jié)學(xué)習(xí)我們均涉及到磁盤和文件存儲(chǔ),今天我們

    2024年01月24日
    瀏覽(27)
  • Linux shell編程學(xué)習(xí)筆記33:type 命令

    Linux shell編程學(xué)習(xí)筆記33:type 命令

    ?目錄 0?引言 1 type?命令的功能和格式 1.1?type命令的功能 1.2 type?命令的格式 2 type命令用法實(shí)例 2.1用type命令查看shell內(nèi)置命令(以echo命令為例) 2.2?用type命令查看別名(以ls命令為例) 2.3 用type命令同時(shí)查看shell內(nèi)置命令和別名(以echo和ls命令為例) 2.4?用type命令查看外部

    2024年02月03日
    瀏覽(22)
  • Linux shell編程學(xué)習(xí)筆記47:lsof命令

    Linux shell編程學(xué)習(xí)筆記47:lsof命令

    今天國(guó)產(chǎn)電腦提示磁盤空間已耗盡,使用用df命令檢查文件系統(tǒng)情況,發(fā)現(xiàn)/dev/sda2已使用100%。 Linux shell編程學(xué)習(xí)筆記39:df命令 https://blog.csdn.net/Purpleendurer/article/details/135577571 于是開(kāi)始清理磁盤空間。 第一步是查看已刪除、但空間卻沒(méi)有釋放的進(jìn)程。 這里要用到 lsof命令。

    2024年04月27日
    瀏覽(15)
  • Linux shell編程學(xué)習(xí)筆記39:df命令

    Linux shell編程學(xué)習(xí)筆記39:df命令

    0 前言 1? df命令的功能、格式和選項(xiàng)說(shuō)明 1.1 df命令的功能 1.2 df命令的格式 1.3 df命令選項(xiàng)說(shuō)明? 2 df命令使用實(shí)例? 2.1? df:顯示主要文件系統(tǒng)信息 2.2 df -a:顯示所有文件系統(tǒng)信息 2.3 df?-t[=]TYPE或--type[=]TYPE:顯示TYPE指定類型的文件系統(tǒng)信息 2.4?df --total:追加顯示統(tǒng)計(jì)信息 2

    2024年01月16日
    瀏覽(28)
  • Linux shell編程學(xué)習(xí)筆記37:readarray命令和mapfile命令

    Linux shell編程學(xué)習(xí)筆記37:readarray命令和mapfile命令

    ? 目錄 ? 0 前言 1? readarray命令的格式和功能 1.1 命令格式 1.2?命令功能 1.3?注意事項(xiàng) 2?命令應(yīng)用實(shí)例 2.1 從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)時(shí)不指定數(shù)組名,則數(shù)據(jù)會(huì)保存到MAPFILE數(shù)組中 2.2 從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)并存儲(chǔ)到指定的數(shù)組 2.3?使用 -O?選項(xiàng)指定起始下標(biāo) 2.4?用-n指定有效行數(shù) 2.5?

    2024年02月03日
    瀏覽(21)
  • Linux shell編程學(xué)習(xí)筆記45:uname命令-獲取Linux系統(tǒng)信息

    Linux shell編程學(xué)習(xí)筆記45:uname命令-獲取Linux系統(tǒng)信息

    linux 有多個(gè)發(fā)行版本,不同的版本都有自己的版本號(hào)。 如何知道自己使用的Linux的系統(tǒng)信息呢? 使用uname命令、hostnamectl命令,或者通過(guò)查看/proc/version文件來(lái)了解這些信息。 我們先看看uname命令。 我們可以使用命令 uname --help命令 查看它的用法: purpleEndurer @ ?bash ~ $ uname --

    2024年04月10日
    瀏覽(26)
  • Python調(diào)用adb shell

    在Android開(kāi)發(fā)中,ADB(Android Debug Bridge)是一個(gè)非常重要的工具。它可以讓我們通過(guò)命令行或者其他的客戶端與安裝了ADB驅(qū)動(dòng)的Android設(shè)備進(jìn)行通信,并進(jìn)行一些調(diào)試操作。 Python作為一門靈活強(qiáng)大的語(yǔ)言,很自然就成為了用來(lái)控制ADB的工具之一。本文將介紹如何使用Python調(diào)用A

    2024年02月07日
    瀏覽(28)
  • Java進(jìn)程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令

    Java進(jìn)程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令

    目錄 ProcessBuilder類的介紹及使用 【前言】 【正文】 --構(gòu)造方法-- --常用方法-- --使用技巧-- --調(diào)用本地Shell命令,實(shí)例-- 【總結(jié)】 【注意】 ????????在做一個(gè)項(xiàng)目的時(shí)候需要用到運(yùn)行時(shí)動(dòng)態(tài)執(zhí)行JAVA命令,一開(kāi)始的思路是運(yùn)行時(shí)生成bat腳本,然后通過(guò)Runtime類的exec方法之行

    2024年02月09日
    瀏覽(26)
  • 【Linux命令行與Shell腳本編程】第十四章,呈現(xiàn)數(shù)據(jù)

    【Linux命令行與Shell腳本編程】第十四章,呈現(xiàn)數(shù)據(jù)

    第十四章 呈現(xiàn)數(shù)據(jù) 1.1,標(biāo)準(zhǔn)文件描述符 文件描述符 縮寫 描述 0 STDIN 標(biāo)準(zhǔn)輸入 1 STDOUT 標(biāo)準(zhǔn)輸出 2 STDERR 標(biāo)準(zhǔn)錯(cuò)誤 1.1.1,STDIN 標(biāo)準(zhǔn)輸入 1.1.2,STDOUT 標(biāo)準(zhǔn)輸出 1.1.3,STDERR 錯(cuò)誤輸出 1.2,重定向錯(cuò)誤 1.2.1.只重定向錯(cuò)誤 n 1.2.2.重定向錯(cuò)誤消息和正常輸出 2.1,臨時(shí)重定向 2.2,永久重定向 exec 4

    2023年04月25日
    瀏覽(25)
  • Linux shell編程學(xué)習(xí)筆記6:查看和設(shè)置變量的常用命令

    Linux shell編程學(xué)習(xí)筆記6:查看和設(shè)置變量的常用命令

    上節(jié)我們介紹了變量的變量命名規(guī)則、變量類型、使用變量時(shí)要注意的事項(xiàng),今天我們學(xué)習(xí)一下查看和設(shè)置變量的一些常用命令,包括變量的提升,有些命令在之前的實(shí)例中已經(jīng)使用過(guò)了。 語(yǔ)法格式:echo [參數(shù)] [輸出內(nèi)容] 常用參數(shù): -e:支持反斜線控制的字符轉(zhuǎn)換(具體參

    2024年02月07日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包