亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳談python中subprocess shell=False與shell=True的區(qū)別

 更新時(shí)間:2021年04月23日 08:38:05   作者:逍遙自在017  
這篇文章主要介紹了詳談python中subprocess shell=False與shell=True的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

shell=True參數(shù)會(huì)讓subprocess.call接受字符串類型的變量作為命令,并調(diào)用shell去執(zhí)行這個(gè)字符串,當(dāng)shell=False是,subprocess.call只接受數(shù)組變量作為命令,并將數(shù)組的第一個(gè)元素作為命令,剩下的全部作為該命令的參數(shù)。

舉個(gè)例子來說明

from subprocess import call  
import shlex  
cmd = "cat test.txt; rm test.txt"  
call(cmd, shell=True)

上述腳本中,shell=True的設(shè)置,最終效果是執(zhí)行了兩個(gè)命令

cat test.txt 和 rm test.txt

把shell=True 改為False,

from subprocess import call  
import shlex  
cmd = "cat test.txt; rm test.txt"  
cmd = shlex(cmd)  
call(cmd, shell=False)

則調(diào)用call的時(shí)候,只會(huì)執(zhí)行cat的命令,且把 "test.txt;" "rm" "test.txt" 三個(gè)字符串當(dāng)作cat的參數(shù),所以并不是我們直觀看到的好像有兩個(gè)shell命令了。

也許你會(huì)說,shell=True 不是很好嗎,執(zhí)行兩個(gè)命令就是我期望的呀。但其實(shí),這種做法是不安全的,因?yàn)槎鄠€(gè)命令用分號隔開,萬一檢查不夠仔細(xì),執(zhí)行了危險(xiǎn)的命令比如 rm -rf / 這種那后果會(huì)非常嚴(yán)重,而使用shell=False就可以避免這種風(fēng)險(xiǎn)。

總體來說

看實(shí)際需要而定,官方的推薦是盡量不要設(shè)置shell=True。

補(bǔ)充: python subprocess模塊的shell參數(shù)問題

昨天調(diào)試其他同學(xué)的代碼時(shí),發(fā)現(xiàn)對于subprocess模塊所傳的args變量,與shell變量存在關(guān)聯(lián),傳值不當(dāng)會(huì)有各種問題。比較有趣,就記錄一下。

根據(jù)subprocess模塊的args定義如下:

args is required for all calls and should be a string, or a sequence of program arguments. Providing a sequence of arguments is generally preferred, as it allows the module to take care of any required escaping and quoting of arguments (e.g. to permit spaces in file names). If passing a single string, either shell must be True (see below) or else the string must simply name the program to be executed without specifying any arguments.

對于args,可傳string,也可傳list,但當(dāng)傳string時(shí),shell的值必須設(shè)為True。

當(dāng)shell為True時(shí)

If shell is True, the specified command will be executed through the shell. This can be useful if you are using Python primarily for the enhanced control flow it offers over most system shells and still want convenient access to other shell features such as shell pipes, filename wildcards, environment variable expansion, and expansion of ~ to a user’s home directory.

就是調(diào)用了系統(tǒng)的 sh 來執(zhí)行命令(args的string),這樣會(huì)導(dǎo)致一些的安全問題,類似于SQL Injection攻擊:

from subprocess import call
filename = input("What file would you like to display?\n")
What file would you like to display?
non_existent; rm -rf / #
call("cat " + filename, shell=True) # Uh-oh. This will end badly...

所以,安心用shell=False吧,記得args傳list。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • python實(shí)現(xiàn)的各種排序算法代碼

    python實(shí)現(xiàn)的各種排序算法代碼

    python實(shí)現(xiàn)的各種排序算法,包括選擇排序、冒泡排序、插入排序、歸并排序等,學(xué)習(xí)python的朋友可以參考下
    2013-03-03
  • Python進(jìn)行圖片信息提取并重命名

    Python進(jìn)行圖片信息提取并重命名

    Tesseract-OCR是一款優(yōu)秀的開源OCR軟件,本文主要介紹了如何使用Tesseract-OCR工具識(shí)別圖片并提取信息,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • Python輕量級Web框架之Flask用法詳解

    Python輕量級Web框架之Flask用法詳解

    Flask是一個(gè)用Python編寫的輕量級Web應(yīng)用框架,由于其“微”性質(zhì),Flask在提供核心服務(wù)的同時(shí),仍然提供了許多擴(kuò)展的可能性,在這篇文章中,我們將從最基礎(chǔ)開始,學(xué)習(xí)如何使用Flask構(gòu)建一個(gè)Web應(yīng)用,需要的朋友可以參考下
    2023-08-08
  • Python讀取ini文件、操作mysql、發(fā)送郵件實(shí)例

    Python讀取ini文件、操作mysql、發(fā)送郵件實(shí)例

    這篇文章主要介紹了Python讀取ini文件、操作mysql、發(fā)送郵件實(shí)例,本文重點(diǎn)在Mysql操作的講解上,包含查詢、插入、更新和刪除操作,需要的朋友可以參考下
    2015-01-01
  • 詳解pandas中iloc, loc和ix的區(qū)別和聯(lián)系

    詳解pandas中iloc, loc和ix的區(qū)別和聯(lián)系

    這篇文章主要介紹了詳解pandas中iloc, loc和ix的區(qū)別和聯(lián)系,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(面向?qū)ο?

    python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(面向?qū)ο?

    這篇文章主要介紹了python實(shí)現(xiàn)面向?qū)ο蟀鎸W(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 在Python中使用PIL模塊對圖片進(jìn)行高斯模糊處理的教程

    在Python中使用PIL模塊對圖片進(jìn)行高斯模糊處理的教程

    這篇文章主要介紹了在Python中使用PIL模塊對圖片進(jìn)行高斯模糊處理的教程,這個(gè)無圖形界面的腳本代碼非常簡單,需要的朋友可以參考下
    2015-05-05
  • Python機(jī)器學(xué)習(xí)庫scikit-learn使用詳解

    Python機(jī)器學(xué)習(xí)庫scikit-learn使用詳解

    scikit-learn是Python中最流行的機(jī)器學(xué)習(xí)庫之一,它提供了各種各樣的機(jī)器學(xué)習(xí)算法和工具,包括分類、回歸、聚類、降維等
    2023-03-03
  • Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    本文主要介紹了Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用python Django做網(wǎng)頁

    使用python Django做網(wǎng)頁

    python Django網(wǎng)頁的四個(gè)步驟,很簡單的圖文學(xué)習(xí)。學(xué)習(xí)python Django做網(wǎng)頁的第一步。
    2013-11-11

最新評論