通过python执行带空格的sudo命令

时间:2013-04-03 12:49:46

标签: python python-2.7

嗨,伙计们和我们有问题。

我正在执行一个需要运行sudo命令才能继续的python脚本。这是命令:

sudo /etc/init.d/test restart

问题在于无论我如何执行它,它只运行sudo和/etc/init.d/test并返回:

sudo: /etc/init.d/test: command not found

问题似乎是重启不会随命令一起发送。

这些是我尝试运行命令的方法:

尝试使用os

os.system('sudo /etc/init.d/test restart')

尝试使用子流程

x = subprocess.Popen(['sudo','/etc/init.d/test','restart'])
x.communicate()

再次使用子流程尝试3

x = subprocess.Popen(['sudo','/etc/init.d/test restart'])
x.communicate()

这实际上已经返回了:

sudo: /etc/init.d/test restart: command not found

这是没有意义的,因为如果我直接在它运行的系统上执行命令。
关于我如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:3)

#!/usr/bin/env python
import subprocess,getpass
password = getpass.getpass()
#proc = subprocess.Popen(
#  ['sudo','-p','','-S','/etc/init.d/test','restart'],
#   stdin=subprocess.PIPE)
proc = subprocess.Popen(
    ['sudo','-p','','-S','echo','restart'],
    stdin=subprocess.PIPE)
proc.stdin.write(password+'\n')
proc.stdin.close()
proc.wait()

答案 1 :(得分:0)

如果你得到这个:

sudo: /etc/init.d/test: command not found

表示/etc/init.d/test不存在。从命令行中自己尝试:

> sudo blarg whatever whatever
sudo: blarg: command not found

因此,只需确保您尝试执行的命令确实存在:

ls -l /etc/init.d/test

如果你仍然遇到问题,那么首先让它来执行“sudo whoami” - 尝试简化一些事情 - 一旦你开始工作,把它改成你的“真正”命令。