在python

时间:2017-11-27 01:19:06

标签: python-3.x subprocess

大家好,                 我是python的新手。 我试图在python

中执行shell命令

shell命令的语法是这样的 - > programme.sh -ip -hostname --old_ip --old_host

这是我的python代码

  import socket
 import subprocess
 from subprocess import Popen, PIPE, STDOUT


   class Hosts:
   returncode = 0
   hostname = socket.gethostname()
ip = socket.gethostbyname(socket.gethostname())
# print(hostname)
def __init__(self):
    self.h = socket.gethostname()
    self.n = socket.gethostbyname(socket.gethostname())

def changeaddr(self):
     a=Hosts.hostname
     cmd='programme.sh -host a -ip Hosts.ip  -host_old <old host name> -host_ip x.x.x.x'
     cmd_new='programme.sh --continue'
     p=Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True )
     output=str(p.stdout.read())
     #print(output)
     status=output.find("error")
     if (status != -1):
       print("error encountered")
     else:
       p_new=Popen(cmd_new, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True )
       final_output=str(p_new.stdout.read())
       print(final_output)
      if __name__ == "__main__":
         h=Hosts()
         h.changeaddr()

这里的问题是在cmd中,变量a和Hosts.ip没有内插到它们的值,只被视为a和Hosts.ip,导致shell命令失败

可以指导我如何解决这个问题

1 个答案:

答案 0 :(得分:0)

您必须确保cmd字符串具有正确的值:

cmd='programme.sh -host ' + a + ' -ip ' + Hosts.ip + ' -host_old <old host name> -host_ip x.x.x.x'