我有一个 Errno 13 Permission denied with subprocess in python

Posted

技术标签:

【中文标题】我有一个 Errno 13 Permission denied with subprocess in python【英文标题】:I have an Errno 13 Permission denied with subprocess in python 【发布时间】:2012-10-02 13:36:23 【问题描述】:

有问题的那一行是

ret=subprocess.call(shlex.split(cmd))

cmd = /usr/share/java -cp pig-hadoop-conf-Simpsons:lib/pig-0.8.1-cdh3u1-core.jar:lib/hadoop-core-0.20.2-cdh3u1.jar org.apache.pig.Main -param func=cat -param from =foo.txt -x mapreduce fsFunc.pig 

错误是。

File "./run_pig.py", line 157, in process
    ret=subprocess.call(shlex.split(cmd))
File "/usr/lib/python2.7/subprocess.py", line 493, in call
  return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
  errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
  raise child_exception
OSError: [Errno 13] Permission denied

如果需要更多信息,请告诉我。任何帮助表示赞赏。谢谢。

【问题讨论】:

除了@Woobe 的cmets,foo.txt 不会是您运行该命令时所期望的位置;您应该通过 foo.txtfsFunc.pig 及其完整路径名。 此程序当前在从它所在的服务器执行时运行。我试图让它在我的 Ubuntu 桌面上运行。 foo.txt not existing 不是当前的问题,它现在只是一个占位符。 【参考方案1】:

错误表明/usr/share/java 没有允许您执行它的权限,可能是因为它是一个目录,而不是可执行文件。

在您的 Ubuntu 机器上找到 java 可执行文件的位置(可能是 /usr/bin/java),然后将 /usr/share/ 更改为指向正确的位置。

【讨论】:

Java 未正确安装在 bin/java 中,已修复。 一般来说,该错误似乎意味着当前用户无法执行某些内容。您可以使用chmod +x executable 来修复错误。【参考方案2】:

只需输入chmod -R 777 /your/project/

它适用于我的...

【讨论】:

chmod -R 777 /your/project/ 使系统上的任何用户都可以读取、编辑和执行项目中的所有内容。你最好这样做:chmod -R +x /your/project/。这只是使系统上的任何用户都可以执行所有内容,或者只是找到可执行文件并执行chmod +x executable 会更好。这提高了安全性。【参考方案3】:

这是一个操作系统权限错误。这意味着您的用户无权写入该目录/文件。这与 Python 无关。

【讨论】:

【参考方案4】:

您也可以尝试将 shell=True 设置为 subprocess.call() 中的第二个参数,这可能会起作用。

ret = subprocess.call(shlex.split(cmd), shell=True)

cmd = /usr/share/java -cp pig-hadoop-conf-Simpsons:lib/pig-0.8.1-cdh3u1-core.jar:lib/hadoop-core-0.20.2-cdh3u1.jar org.apache.pig.Main -param func=cat -param from =foo.txt -x mapreduce fsFunc.pig 

【讨论】:

以上是关于我有一个 Errno 13 Permission denied with subprocess in python的主要内容,如果未能解决你的问题,请参考以下文章

Python UDP broadcast PermissionError: [Errno 13] Permission denied

PermissionError: [Errno 13] Permission denied:

sendto() 向广播地址发包返回errno 13, Permission denied错误

PermissionError: [Errno 13] Permission denied

无法在 docker [Errno 13] Permission denied 中使用解释器运行 python 脚本

/blog/create [Errno 13] Permission denied: '/static' during image upload in Django