如何避免 Shell 使用路径变量注入并等待命令存在?

How to avoid Shell Injection with a path variable and wait for command exist?

我需要读取命令的退出(然后我必须以同步方式等待它):

import subprocess
subprocess.call('ls ~', shell=True)

我的问题是这样的路径:

~/testing/;xterm;/blabla

我如何从用户那里清除该字符串(允许他的语言中的特殊字符)?

import subprocess
subprocess.call('ls ~/testing/;xterm;/blabla', shell=True) # This will launch xterm

我在 PHP 中找到了 escapeshellcmd,但我在 Python 中没有找到任何东西。

PS:这不是这个的副本:

提前致谢!

=======

传递列表而不是字符串。并删除 shell=True 以使命令不是 shell 的 运行。 (您需要使用 os.path.expanduser 自行扩展 ~

import os
import subprocess

subprocess.call(['ls', os.path.expanduser('~') + '/testing/;xterm;/blabla'])

旁注:如果您想获取文件名列表,最好使用 os.listdir 代替:

filelist = os.listdir(os.path.expanduser('~') + '/testing/;xterm;/blabla')