【发布时间】:2016-04-28 06:29:02
【问题描述】:
我有一个大型安装程序,当我启动一台新机器时,它可以节省大量时间,但我现在无法让一件事正常工作。我想填写一个 TD 驱动程序所需的配置文件,由于它是一个受特殊保护的文件,我遇到了麻烦。我的蟒蛇看起来像:
#configure webapi driver
ODBC_PATH = os.path.join(HOMEPATH, '/etc/odbcinst.ini')
ODBC_SETTINGS = """\
[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1"""
call_sp('sudo echo "{}" > {}'.format(ODBC_SETTINGS, ODBC_PATH))
call_sp 只是我调用子进程但允许 args 的方式,就像 Popen 一样。我一无所知,因为它默默地失败了(直到我尝试运行服务器我才知道)并且在 shell 中我没有提示我输入密码:
cchilders:~/scripts/setup_scripts/dimensional [master]$ sudo echo "[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1" > /etc/odbcinst.ini
bash: /etc/odbcinst.ini: Permission denied
cchilders:~/scripts/setup_scripts [master]$ sudo echo "somethin" > /etc/odbcinst.ini
bash: /etc/odbcinst.ini: Permission denied
但是 sudo 进入 nano 可以,我可以手动完成:
cchilders:~/scripts/setup_scripts [master]$ sudo nano /etc/odbcinst.ini
[sudo] password for cchilders:
为什么我不能用终端的文本填充这个ini文件,如果不可能,我怎样才能自动填充python脚本?类型
【问题讨论】:
-
类似于stackoverflow.com/questions/84882/…。总之,请尝试
sudo sh -c "echo 'something' > /etc/odbcinst.ini"