1

我正在尝试在 python 中运行一个子进程,但我收到错误消息:OSError: [Errno 13] Permission denied

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" 的字符串

代码用完了 Unix

4

2 回答 2

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().

于 2013-09-22T07:57:08.183 回答
0

解决方案:

这适用于 Linux,但适用于 Unix:

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

对于 Windows:

subprocess.call(["start",cp2])
于 2013-09-23T01:05:45.980 回答