1

我正在尝试通过 Python 脚本安装 Debian 软件包文件。所以我使用了下面的脚本。

import os
os.system('echo %(passwd)s | sudo dpkg -i 34.deb' %locals())
运行 Python 脚本后,未安装软件包。它显示以下消息。
sudo:不存在 tty,也没有指定 askpass 程序
但是当我尝试通过终端安装软件包时,它已正确安装。我在终端中给出的命令如下。
sudo dpkg -i 34.deb
如果你知道,请告诉我。

4

2 回答 2

1

python too have the subprocess Module

import subprocess as sp
sp.call(["sudo","dpkg","-i", "some.deb"])

Must work

you can add each parameter

于 2013-02-07T08:16:20.507 回答
1

似乎sudo不接受管道密码,因此请遵循文档

通常,如果 sudo 需要密码,它会从用户终端读取密码。如果指定了 -A (askpass) 选项,则会执行一个(可能是图形的)帮助程序来读取用户的密码并将密码输出到标准输出。如果设置了 SUDO_ASKPASS 环境变量,它指定了帮助程序的路径。否则,如果 /etc/sudo.conf 包含指定 askpass 程序的行,则将使用该值。例如:

                   # Path to askpass helper program
                   Path askpass /usr/X11R6/bin/ssh-askpass

如果没有可用的 askpass 程序,sudo 将退出并出现错误。

你应该用-A标志传递一个 askpass 程序。

编辑:似乎sudo接受密码stdin,使用-S标志。

于 2013-02-07T08:11:11.243 回答