而是假设路径开始于一个斜杠,并使用+
串联,用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()
之前是否实际指向实际文件。
你能*显示*你的代码?这是什么环境,有什么权限? – user2357112
代码有问题 –
检查'cp2'的值。这是你期望的吗?它是否缺少一个主要的斜线,还是它没有一个应该是的?如果它命名了一个真实文件,您是否有权限访问该文件? – user2357112