簡體   English   中英

為什么subprocess.call([“ module”,“ list”])失敗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM