我正在尝试在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”的字符串
代码用完了
答案 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])