@@ -499,21 +499,6 @@ def append_conf(self, filename, string):
499499
500500 return self
501501
502- def pg_ctl (self , command , params = {}, command_options = []):
503- """
504- Runs pg_ctl with specified params. This function is a workhorse
505- for start(), stop(), reload() and status() functions.
506- """
507-
508- _params = [command ]
509-
510- for key , value in six .iteritems (params ):
511- _params .append (key )
512- if value :
513- _params .append (value )
514-
515- _execute_utility ("pg_ctl" , _params , self .utils_logname )
516-
517502 def status (self ):
518503 """
519504 Check this node's status.
@@ -523,8 +508,8 @@ def status(self):
523508 """
524509
525510 try :
526- _params = { " -D": self .data_dir }
527- self . pg_ctl ( "status " , _params )
511+ _params = [ "status" , " -D", self .data_dir ]
512+ _execute_utility ( "pg_ctl " , _params , self . utils_logname )
528513 return NodeStatus .Running
529514
530515 except ExecUtilException as e :
@@ -568,10 +553,13 @@ def get_control_data(self):
568553
569554 return out_data
570555
571- def start (self , params = {} ):
556+ def start (self , params = [] ):
572557 """
573558 Start this node using pg_ctl.
574559
560+ Args:
561+ params: additional arguments for _execute_utility().
562+
575563 Returns:
576564 This instance of PostgresNode.
577565 """
@@ -594,15 +582,16 @@ def start(self, params={}):
594582 # choose recovery_filename
595583 recovery_filename = os .path .join (self .data_dir , "recovery.conf" )
596584
597- _params = {
598- "-D" : self . data_dir ,
599- "-w" : None ,
600- "-l" : log_filename ,
601- }
602- _params . update ( params )
585+ _params = [
586+ "start" ,
587+ "-D{}" . format ( self . data_dir ) ,
588+ "-l{}" . format ( log_filename ) ,
589+ "-w"
590+ ] + params
603591
604592 try :
605- self .pg_ctl ("start" , _params )
593+ _execute_utility ("pg_ctl" , _params , self .utils_logname )
594+
606595 except ExecUtilException as e :
607596 def print_node_file (node_file ):
608597 if os .path .exists (node_file ):
@@ -630,48 +619,53 @@ def print_node_file(node_file):
630619
631620 return self
632621
633- def stop (self , params = {} ):
622+ def stop (self , params = [] ):
634623 """
635624 Stop this node using pg_ctl.
636625
626+ Args:
627+ params: additional arguments for _execute_utility().
628+
637629 Returns:
638630 This instance of PostgresNode.
639631 """
640632
641- _params = {"-D" : self .data_dir , "-w" : None }
642- _params .update (params )
643- self .pg_ctl ("stop" , _params )
633+ _params = ["stop" , "-D" , self .data_dir , "-w" ] + params
634+ _execute_utility ("pg_ctl" , _params , self .utils_logname )
644635
645636 if self .logger :
646637 self .logger .stop ()
647638
648639 return self
649640
650- def restart (self , params = {} ):
641+ def restart (self , params = [] ):
651642 """
652643 Restart this node using pg_ctl.
653644
645+ Args:
646+ params: additional arguments for _execute_utility().
647+
654648 Returns:
655649 This instance of PostgresNode.
656650 """
657651
658- _params = {"-D" : self .data_dir , "-w" : None }
659- _params .update (params )
660- self .pg_ctl ("restart" , _params )
652+ _params = ["restart" , "-D" , self .data_dir , "-w" ] + params
653+ _execute_utility ("pg_ctl" , _params ,
654+ self .utils_logname ,
655+ write_to_pipe = False )
661656
662657 return self
663658
664- def reload (self , params = {} ):
659+ def reload (self , params = [] ):
665660 """
666661 Reload config files using pg_ctl.
667662
668663 Returns:
669664 This instance of PostgresNode.
670665 """
671666
672- _params = {"-D" : self .data_dir }
673- _params .update (params )
674- self .pg_ctl ("reload" , _params )
667+ _params = ["reload" , "-D" , self .data_dir , "-w" ] + params
668+ _execute_utility ("pg_ctl" , _params , self .utils_logname )
675669
676670 return self
677671
@@ -958,7 +952,7 @@ def call_initdb(_data_dir):
958952 raise InitNodeException (e .message )
959953
960954
961- def _execute_utility (util , args , logfile ):
955+ def _execute_utility (util , args , logfile , write_to_pipe = True ):
962956 """
963957 Execute utility (pg_ctl, pg_dump etc) using get_bin_path().
964958
@@ -972,14 +966,25 @@ def _execute_utility(util, args, logfile):
972966 """
973967
974968 with open (logfile , "a" ) as file_out :
975- # run pg_ctl
969+ stdout_file = subprocess .DEVNULL
970+ stderr_file = subprocess .DEVNULL
971+
972+ if write_to_pipe :
973+ stdout_file = subprocess .PIPE
974+ stderr_file = subprocess .STDOUT
975+
976+ # run utility
976977 process = subprocess .Popen ([get_bin_path (util )] + args ,
977- stdout = subprocess . PIPE ,
978- stderr = subprocess . STDOUT )
978+ stdout = stdout_file ,
979+ stderr = stderr_file )
979980
980- # get result of pg_ctl
981+ # get result
981982 out , _ = process .communicate ()
982- out = out .decode ('utf-8' )
983+
984+ if out :
985+ out = out .decode ('utf-8' )
986+ else :
987+ out = ""
983988
984989 # write new log entry
985990 file_out .write ('' .join (map (lambda x : str (x ) + ' ' , [util ] + args )))
0 commit comments