[英]Why does subprocess.call(['python', argsStr]) fail both with or without shell=True?
[英]Why does subprocess.call([“module”,“list”]) fail?
我正在找到子流程模塊,在其中加載列表而不是字符串(shell = True)實在令人沮喪。 直觀地,subprocess.call([“ module”,“ list”])應該可以工作,但是不會,並產生以下結果:
File "test.py", line 45, in main
subprocess.call(["module","list"])
File "/tools/general/app/Python-2.7.3/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/tools/general/app/Python-2.7.3/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/tools/general/app/Python-2.7.3/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
但是, subprocess.call("module list", shell=True)
可以工作。 為什么?
這只是命令的格式。 在不通過shell進行分析時,它將分別通過每個命令和參數。 但是,當告訴解釋器只使用gnome-shell(這在解析整個命令字符串時要好得多,並且對間距很挑剔)時,命令的格式將發生變化以反映這一點。 解析問題反映在安全隱患上,該隱患是由未經處理的輸入直接泵送到shell過程造成的。 從文檔 :
執行包含來自不受信任來源的未經驗證的輸入的shell命令會使程序容易受到shell注入的攻擊,這是一個嚴重的安全漏洞,可能導致任意命令執行。 出於這個原因,在命令字符串是由外部輸入構造的情況下,強烈建議不要使用
shell=True
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.