而不是假设路径以斜杠开头,并使用 连接+
,用于os.path.join()
创建路径:
import os.path
basepath = os.path.join(wilixdirectory, 'Users', loggedusr)
cp2 = cp2.lstrip('~/')
cp2 = os.path.abspath(os.path.join(basepath, cp2))
if not cp2.startswith(basepath + os.path.pathsep):
# something is wrong still, the absolute final path is not inside of
# user directory, bail now.
raise ValueError('Not a valid command')
# Perhaps test if os.path.isfile(cp2) is True?
args = [cp2]
if cp3 is not None:
args.append[cp3]
subprocess.call(args)
请注意,我剥离~
, 并/
从一开始cp2
就从用户输入中删除任何意外的开始字符,然后用于os.path.abspath()
确保路径是规范路径,并解决了任何./
和../
条目。然后,您需要验证最终结果是否仍在用户目录中,而不是在用户目录之外。
您可以os.path.isfile()
在cp2
运行subprocess.call()
.