关于python:如何避免使用路径变量进行shell注入,并等待命令存在?

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

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

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

我的问题是这样一条路:

1
~/testing/;xterm;/blabla

如何清除用户的字符串(允许其语言中的特殊字符)?

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

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

附言:这不是这个的复制品:

  • 因为它是完整的路径,而不是文件名。
  • 我读了os.path,没有找到解决方案。

事先谢谢!

不受欢迎的=


传递列表而不是字符串。并删除shell=True使命令不由shell运行。(您需要使用EDOCX1[2]扩展自己的EDOCX1[1]

1
2
3
4
import os
import subprocess

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

旁注:如果你想得到文件名列表,最好用os.listdir代替:

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