嗨,伙计们和我们有问题。
我正在执行一个需要运行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
这是没有意义的,因为如果我直接在它运行的系统上执行命令。
关于我如何做到这一点的任何想法?
答案 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” - 尝试简化一些事情 - 一旦你开始工作,把它改成你的“真正”命令。