亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:10日期:2022-06-21 15:19:51

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

舉個(gè)例子來說明

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

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 callfilename = 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è)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品高清全国免费观看 | 国产成人精品女人不卡在线 | 亚洲香蕉一区二区三区在线观看 | 亚洲综合网在线观看 | 日韩一级a毛片欧美区 | 日本欧美做爰全免费的视频 | 性感美女视频黄.免费网站 性高湖久久久久久久久 | 成人毛片全部免费观看 | 特黄特黄一级高清免费大片 | 天码毛片一区二区三区入口 | 欧美一区二三区 | 在线观看免费视频国产 | 久草在线资源网站 | 亚洲成a人片在线播放 | 日韩三级在线免费观看 | 久青草国产97香蕉在线视频xx | www.亚洲国产| 手机在线毛片 | 国产亚洲精品91 | 久久久久久久久久免免费精品 | 一级aaa级毛片午夜在线播放 | 狠狠色丁香婷婷综合小时婷婷 | 成年女人午夜免费视频 | 国产成人亚洲精品影院 | 精品国产视频在线观看 | 久久免费国产视频 | 日本一在线中文字幕天堂 | 99久久精品费精品国产一区二 | 欧美激情成人网 | 久久中文字幕日韩精品 | 成 人 亚洲 综合天堂 | 亚洲第一综合网站 | 撸天堂| 中日韩精品视频在线观看 | s8国产成人精品视频 | 国产日韩久久 | 美国一级毛片片aa成人 | 亚洲男人天堂2017 | 精品一区二区久久久久久久网站 | 日本欧美韩国一区二区三区 | 欧美亚洲国产成人综合在线 |