ACK
Thanks!
Best Regards!
Wayne Sun
Redhat QE, Beijing, China
+86-10-6260-8238
----- Original Message -----
From: "Guannan Ren" <gren(a)redhat.com>
To: libvir-list(a)redhat.com
Sent: Wednesday, July 27, 2011 2:58:33 PM
Subject: [libvirt] [libvirt-test-API][PATCH 2/2] Add four helpful functions in utils.py.
* get_local_hostname() get hostname on local machine
* exec_cmd() execute shell command
* remote_exec_pexpect() execture command on remote host
* scp_file() copy file to remote host
---
utils/Python/utils.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 69 insertions(+), 0 deletions(-)
diff --git a/utils/Python/utils.py b/utils/Python/utils.py
index eaa8eab..6787e87 100644
--- a/utils/Python/utils.py
+++ b/utils/Python/utils.py
@@ -26,6 +26,9 @@ import commands
import socket
import fcntl
import struct
+import pexpect
+import string
+import subprocess
from xml.dom import minidom
class Utils(object):
@@ -58,6 +61,10 @@ class Utils(object):
arch = ret.split(" ")[-2]
return arch
+ def get_local_hostname(self):
+ """ get local host name """
+ return socket.gethostname()
+
def get_libvirt_version(self, ver = ''):
ver = commands.getoutput("rpm -q libvirt|head -1")
if ver.split('-')[0] == 'libvirt':
@@ -364,3 +371,65 @@ class Utils(object):
(ret, out) = commands.getstatusoutput(cmd)
return ret
+ def exec_cmd(self, command, sudo=False, cwd=None, infile=None, outfile=None,
shell=False, data=None):
+ """
+ Executes an external command, optionally via sudo.
+ """
+ if sudo:
+ if type(command) == type(""):
+ command = "sudo " + command
+ else:
+ command = ["sudo"] + command
+ if infile == None:
+ infile = subprocess.PIPE
+ if outfile == None:
+ outfile = subprocess.PIPE
+ p = subprocess.Popen(command, shell=shell, close_fds=True, cwd=cwd,
+ stdin=infile, stdout=outfile, stderr=subprocess.PIPE)
+ (out, err) = p.communicate(data)
+ if out == None:
+ # Prevent splitlines() from barfing later on
+ out = ""
+ return (p.returncode, out.splitlines())
+
+ def remote_exec_pexpect(self, hostname, username, password, cmd):
+ """ Remote exec function via pexpect """
+ user_hostname = "%s@%s" % (username, hostname)
+ child = pexpect.spawn("/usr/bin/ssh", [user_hostname, cmd],
+ timeout = 60, maxread = 2000, logfile = None)
+ while True:
+ index = child.expect(['(yes\/no)', 'password:', pexpect.EOF,
+ pexpect.TIMEOUT])
+ if index == 0:
+ child.sendline("yes")
+ elif index == 1:
+ child.sendline(password)
+ elif index == 2:
+ child.close()
+ return 0
+ elif index == 3:
+ child.close()
+ return 1
+
+ return 0
+
+ def scp_file(self, hostname, username, password, target_path, file):
+ """ Scp file to remote host """
+ user_hostname = "%s@%s:%s" % (username, hostname, target_path)
+ child = pexpect.spawn("/usr/bin/scp", [file, user_hostname])
+ while True:
+ index = child.expect(['yes\/no', 'password: ',
+ pexpect.EOF,
+ pexpect.TIMEOUT])
+ if index == 0:
+ child.sendline("yes")
+ elif index == 1:
+ child.sendline(password)
+ elif index == 2:
+ child.close()
+ return 0
+ elif index == 3:
+ child.close()
+ return 1
+
+ return 0
--
1.7.1
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list