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

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

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

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

舉個例子來說明

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

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

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的時候,只會執(zhí)行cat的命令,且把 "test.txt;" "rm" "test.txt" 三個字符串當(dāng)作cat的參數(shù),所以并不是我們直觀看到的好像有兩個shell命令了。

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

總體來說

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

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

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

根據(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時,shell的值必須設(shè)為True。

當(dāng)shell為True時

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),這樣會導(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。

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

相關(guān)文章

  • pytorch常用函數(shù)之torch.randn()解讀

    pytorch常用函數(shù)之torch.randn()解讀

    這篇文章主要介紹了pytorch常用函數(shù)之torch.randn()解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python使用Requests請求網(wǎng)頁方式

    Python使用Requests請求網(wǎng)頁方式

    這篇文章主要介紹了Python使用Requests請求網(wǎng)頁方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python隨機3分鐘發(fā)送一次消息完整代碼

    python隨機3分鐘發(fā)送一次消息完整代碼

    最近我接到這樣的任務(wù)需求有一個實時任務(wù),想要間隔3分鐘發(fā)送,最近的一次消息,接下來通過本文給大家分享python隨機3分鐘發(fā)送一次消息,需要的朋友可以參考下
    2024-03-03
  • python爬蟲之urllib,偽裝,超時設(shè)置,異常處理的方法

    python爬蟲之urllib,偽裝,超時設(shè)置,異常處理的方法

    今天小編就為大家分享一篇python爬蟲之urllib,偽裝,超時設(shè)置,異常處理的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python定時發(fā)送天氣預(yù)報郵件代碼實例

    Python定時發(fā)送天氣預(yù)報郵件代碼實例

    這篇文章主要介紹了Python定時發(fā)送天氣預(yù)報郵件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例

    python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例

    這篇文章主要介紹了python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python二進制文件的轉(zhuǎn)譯詳解

    python二進制文件的轉(zhuǎn)譯詳解

    這篇文章主要介紹了python二進制文件的轉(zhuǎn)譯詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • python使用建議與技巧分享(一)

    python使用建議與技巧分享(一)

    這篇文章主要介紹了python使用建議與技巧分享,幫助大家更高效的使用python,感興趣的朋友可以了解下
    2020-08-08
  • python3調(diào)用windows dos命令的例子

    python3調(diào)用windows dos命令的例子

    今天小編就為大家分享一篇python3調(diào)用windows dos命令的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python模擬實現(xiàn)全功能貸款計算器

    Python模擬實現(xiàn)全功能貸款計算器

    在個人理財中,貸款計算器是一款非常實用的工具,本文將教你如何使用Python編寫一個全功能的貸款計算器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12

最新評論

星座| 新野县| 合水县| 苍梧县| 金秀| 天峻县| 晋宁县| 巫溪县| 奉化市| 同仁县| 项城市| 宝山区| 农安县| 济源市| 崇阳县| 于田县| 汉寿县| 拉孜县| 墨竹工卡县| 治多县| 珲春市| 惠安县| 如东县| 永清县| 合肥市| 闸北区| 句容市| 大姚县| 东莞市| 远安县| 五莲县| 苍梧县| 公主岭市| 临洮县| 佳木斯市| 荃湾区| 天津市| 遂昌县| 万荣县| 垣曲县| 昌江|