OSERROR:[错误13]权限被拒绝的Python subprocess.call()(OSErr

2019-10-18 16:14发布

我试图运行在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

Answer 1:

相反的假设路径以斜线开始,使用串联+ ,使用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()



Answer 2:

解:

这将用于Linux,但在Unix工作:

subprocess.call(["open","-a",cp2])

对于Windows:

subprocess.call(["start",cp2])


文章来源: OSError: [Errno 13] Permission denied Python subprocess.call()