python 启动 Postgresql 的 Popen chmod 错误
python Popen chmod error starting Postgresql
我可以 运行:
sudo service postgresql start
从命令行运行,没有问题。但是,当我尝试 运行ning 以下内容时:
import os
from subprocess import Popen,PIPE
pwd = getsudopwd()
cmd = ['sudo','service',process,'state']
p = Popen(cmd,stdout=PIPE,stdin=PIPE,stderr=PIPE,universal_newlines=True)
out,err = p.communicate(pwd+'\n')
if err: raise RuntimeError(err)
我收到以下错误
chmod:更改“/var/run/postgresql”的权限:不允许操作。那么,为什么在 Python 中的 运行 访问 postgresql 的 pid 目录时出错?
我建议您使用 sh
库
非常简单易用
from sh import sudo
print sudo('service postgresql start')
运行 带有 -S 选项的 sudo 命令并将您的密码通过管道传输到 sudo 命令的标准输入应该可以解决您的问题。
import os
from subprocess import Popen, PIPE
echo = Popen(('echo', 'mypasswd'), stdout = PIPE)
p = Popen(['sudo', '-S', 'service', 'postgresql', 'restart'], stdin = echo.stdout, stdout = PIPE, stderr = PIPE, universal_newlines = True)
out, err = p.communicate()
print out
你可以简单地使用 -S
和 sudo:
from subprocess import Popen, PIPE
import getpass
pwd = getpass.getpass()
proc = Popen(['sudo', '-S', 'service',process,'state'],
stdout=PIPE, stdin=PIPE, stderr=PIPE,universal_newlines=True)
out,err= proc.communicate(input="{}\n".format(pwd))
我可以 运行:
sudo service postgresql start
从命令行运行,没有问题。但是,当我尝试 运行ning 以下内容时:
import os
from subprocess import Popen,PIPE
pwd = getsudopwd()
cmd = ['sudo','service',process,'state']
p = Popen(cmd,stdout=PIPE,stdin=PIPE,stderr=PIPE,universal_newlines=True)
out,err = p.communicate(pwd+'\n')
if err: raise RuntimeError(err)
我收到以下错误
chmod:更改“/var/run/postgresql”的权限:不允许操作。那么,为什么在 Python 中的 运行 访问 postgresql 的 pid 目录时出错?
我建议您使用 sh
库
非常简单易用
from sh import sudo
print sudo('service postgresql start')
运行 带有 -S 选项的 sudo 命令并将您的密码通过管道传输到 sudo 命令的标准输入应该可以解决您的问题。
import os
from subprocess import Popen, PIPE
echo = Popen(('echo', 'mypasswd'), stdout = PIPE)
p = Popen(['sudo', '-S', 'service', 'postgresql', 'restart'], stdin = echo.stdout, stdout = PIPE, stderr = PIPE, universal_newlines = True)
out, err = p.communicate()
print out
你可以简单地使用 -S
和 sudo:
from subprocess import Popen, PIPE
import getpass
pwd = getpass.getpass()
proc = Popen(['sudo', '-S', 'service',process,'state'],
stdout=PIPE, stdin=PIPE, stderr=PIPE,universal_newlines=True)
out,err= proc.communicate(input="{}\n".format(pwd))