2013-09-22 41 views
0

我试图运行在python子进程,但我得到的错误信息: OSERROR:[错误13]许可被拒绝OSERROR:[错误13]许可被拒绝的Python subprocess.call()

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

CP2和CP3是用于目录的用户输入

wilixdirectory是目录

loggedusr是像“鲍勃”或“乔”的字符串

代码运行宁出来的Unix

+0

你能*显示*你的代码?这是什么环境,有什么权限? – user2357112

+0

代码有问题 –

+0

检查'cp2'的值。这是你期望的吗?它是否缺少一个主要的斜线,还是它没有一个应该是的?如果它命名了一个真实文件,您是否有权限访问该文件? – user2357112

回答

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()之前是否实际指向实际文件。

0

解决方案:

这会为Linux,但在Unix工作:

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

的Windows:

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

你也可以检查'webbrowser.open(cp2)'是否在你的情况下做了正确的事情。 – jfs

相关问题