我试图运行在python子进程,但我得到的错误信息:OSERROR:[错误13]许可被拒绝
cp2 = cp2.lstrip("~")
cp2 = wilixdirectory+"/Users/"+loggedusr+cp2
if cp3 == None:
subprocess.call([cp2])
else:
subprocess.call([cp2, cp3])
CP2和CP3是用于目录的用户输入
wilixdirectory是一个目录
loggedusr就像是“鲍勃”或“乔”的字符串
该代码运行出的Unix
相反的假设路径以斜线开始,使用串联+
,使用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()
解:
这将用于Linux,但在Unix工作:
subprocess.call(["open","-a",cp2])
对于Windows:
subprocess.call(["start",cp2])