大家好, 我是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命令失败
可以指导我如何解决这个问题
答案 0 :(得分:0)
您必须确保cmd字符串具有正确的值:
cmd='programme.sh -host ' + a + ' -ip ' + Hosts.ip + ' -host_old <old host name> -host_ip x.x.x.x'