Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python subprocess.Popen需要哪些权限?_Python_Macos_Subprocess_Popen - Fatal编程技术网

Python subprocess.Popen需要哪些权限?

Python subprocess.Popen需要哪些权限?,python,macos,subprocess,popen,Python,Macos,Subprocess,Popen,以下代码: gb = self.request.form['groupby'] typ = self.request.form['type'] tbl = self.request.form['table'] primary = self.request.form.get('primary', None) if primary is not None: create = False else: create = True mdb = tempfile.NamedTemporaryF

以下代码:

gb = self.request.form['groupby']
typ = self.request.form['type']
tbl = self.request.form['table']

primary = self.request.form.get('primary', None)

if primary is not None:
    create = False
else:
create = True

mdb = tempfile.NamedTemporaryFile()
mdb.write(self.request.form['mdb'].read())
mdb.seek(0)

csv = tempfile.TemporaryFile()
conversion = subprocess.Popen(("/Users/jondoe/development/mdb-export", mdb.name, tbl,),stdout=csv)
在调用OS X中的最后一行即“conversion=”时导致此错误

Traceback (innermost last):
  Module ZPublisher.Publish, line 119, in publish
  Module ZPublisher.mapply, line 88, in mapply
  Module ZPublisher.Publish, line 42, in call_object
  Module circulartriangle.mdbtoat.mdb, line 62, in __call__
  Module subprocess, line 543, in __init__
  Module subprocess, line 975, in _execute_child
OSError: [Errno 13] Permission denied

我已经尝试了
chmod777/Users/jondoe/development/mdb export
-还需要什么

您还需要确保在链上的目录-/Users、/Users/jondoe和/Users/jondoe/development上运行该代码的用户具有读取和执行权限。

您能将“sudo”提供给子流程吗?这样看吧

@乔恩·哈德利,来自译员:

>>> import subprocess
>>> p = subprocess.call(['sudo','/usr/bin/env'])
PASSWORD:
[snip]

USER=root
USERNAME=root
SUDO_COMMAND=/usr/bin/env
SUDO_USER=telliott99
SUDO_UID=501
SUDO_GID=20
从OS X上的终端,我在运行脚本时必须执行sudo:

$ sudo python test.py
然后(在test.py中)给出与前面相同的输出:

import subprocess
p = subprocess.Popen('/usr/bin/env')

让子流程直接处理来自脚本的身份验证可能不是一个好主意,因为它隐藏了权限提升。但您可以这样看。

假设父文件夹的权限正确(即所有父文件夹都应具有+x权限),请尝试添加:

shell=True
到Popen命令,例如:

subprocess.Popen(("/Users/jondoe/development/mdb-export", mdb.name, tbl,), stdout=csv, shell=True)

“权限拒绝错误”似乎源于Popen试图从错误的位置执行mdb导出(并使用错误的权限进行复合)

如果安装了mdbtools,则以下功能可以正常工作,并继承正确的权限,而无需sudo等

subprocess.Popen(("mdb-export", mdb.name, tbl,),stdout=csv)
(值得注意的是,我一时糊涂,忘记了Popen是用来打开可执行文件的,而不是文件夹或文件夹中不可执行的文件)


感谢您的回复,不管怎样,它们都非常有趣:)

我在root中导出了另一个文件夹/mdb(不喜欢在/Users上设置chmod 777),并将其设置为777。还是一样的错误,试试看。有没有办法查看我的Python进程以什么用户的身份运行?@Jon Hadley>>>导入os>>>os.getenv('user')'telliott99'我知道已经有一段时间了,但我在这个问题上也遇到了麻烦。您是否有可能详细说明您是如何发现Popen试图从错误的位置以错误的权限执行
mdb export