OSError:[Errno 13]权限被拒绝Python subprocess.call()

时间:2013-09-22 05:59:49

标签: python subprocess

我正在尝试在python中运行子进程但是我收到错误消息:     OSError:[Errno 13]权限被拒绝

cp2 = cp2.lstrip("~")
cp2 = wilixdirectory+"/Users/"+loggedusr+cp2 
    if cp3 == None:
    subprocess.call([cp2])
else:
    subprocess.call([cp2, cp3])

cp2和cp3是目录的用户输入

wilixdirectory是一个目录

loggedusr是一个类似“Bob”或“Joe”的字符串

代码用完了

2 个答案:

答案 0 :(得分: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()确保path是规范路径,已解析任何./../条目。您执行然后需要验证最终结果是否仍在用户目录中,而不是在用户目录之外。

您可以使用os.path.isfile()进行测试,看看cp2路径在运行subprocess.call()之前是否实际指向实际文件。

答案 1 :(得分:0)

解决方案:

这适用于Linux但适用于Unix:

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

for Windows:

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