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
?