本文整理汇总了Python中resource_management.core.logger.Logger.format_command_for_output方法的典型用法代码示例。如果您正苦于以下问题:Python Logger.format_command_for_output方法的具体用法?Python Logger.format_command_for_output怎么用?Python Logger.format_command_for_output使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类resource_management.core.logger.Logger
的用法示例。
在下文中一共展示了Logger.format_command_for_output方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _call
# 需要导入模块: from resource_management.core.logger import Logger [as 别名]
# 或者: from resource_management.core.logger.Logger import format_command_for_output [as 别名]
def _call(command, logoutput=None, throw_on_failure=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT,
cwd=None, env=None, preexec_fn=None, user=None, wait_for_finish=True, timeout=None, on_timeout=None,
path=None, sudo=False, on_new_line=None, tries=1, try_sleep=0):
"""
Execute shell command
@param command: list/tuple of arguments (recommended as more safe - don't need to escape)
or string of the command to execute
@param logoutput: boolean, whether command output should be logged of not
@param throw_on_failure: if true, when return code is not zero exception is thrown
@param stdout,stderr:
subprocess.PIPE - enable output to variable
subprocess.STDOUT - redirect to stdout
None - disable output to variable, and output to Python out straightly (even if logoutput is False)
{int fd} - redirect to file with descriptor.
{string filename} - redirects to a file with name.
"""
command_alias = Logger.format_command_for_output(command)
command_alias = string_cmd_from_args_list(command_alias) if isinstance(command_alias, (list, tuple)) else command_alias
# Append current PATH to env['PATH']
env = _add_current_path_to_env(env)
# Append path to env['PATH']
if path:
path = os.pathsep.join(path) if isinstance(path, (list, tuple)) else path
env['PATH'] = os.pathsep.join([env['PATH'], path])
# prepare command cmd
if sudo:
command = as_sudo(command, env=env)
elif user:
command = as_user(command, user, env=env)
# convert to string and escape
if isinstance(command, (list, tuple)):
command = string_cmd_from_args_list(command)
# replace placeholder from as_sudo / as_user if present
env_str = _get_environment_str(env)
for placeholder, replacement in PLACEHOLDERS_TO_STR.iteritems():
command = command.replace(placeholder, replacement.format(env_str=env_str))
# --noprofile is used to preserve PATH set for ambari-agent
subprocess_command = ["/bin/bash","--login","--noprofile","-c", command]
files_to_close = []
if isinstance(stdout, (basestring)):
stdout = open(stdout, 'wb')
files_to_close.append(stdout)
if isinstance(stderr, (basestring)):
stderr = open(stderr, 'wb')
files_to_close.append(stderr)
try:
proc = subprocess.Popen(subprocess_command, stdout=stdout, stderr=stderr,
cwd=cwd, env=env, shell=False, close_fds=True,
preexec_fn=preexec_fn)
if timeout:
timeout_event = threading.Event()
t = threading.Timer( timeout, _on_timeout, [proc, timeout_event] )
t.start()
if not wait_for_finish:
return proc
# in case logoutput==False, never log.
logoutput = logoutput==True and Logger.logger.isEnabledFor(logging.INFO) or logoutput==None and Logger.logger.isEnabledFor(logging.DEBUG)
read_set = []
if stdout == subprocess.PIPE:
read_set.append(proc.stdout)
if stderr == subprocess.PIPE:
read_set.append(proc.stderr)
fd_to_string = {
proc.stdout: "",
proc.stderr: ""
}
all_output = ""
while read_set:
is_proccess_running = (proc.poll() == None)
ready, _, _ = select.select(read_set, [], [], 1)
if not is_proccess_running and not ready:
break
for out_fd in read_set:
if out_fd in ready:
line = os.read(out_fd.fileno(), 1024)
if not line:
read_set = copy.copy(read_set)
read_set.remove(out_fd)
out_fd.close()
continue
fd_to_string[out_fd] += line
#.........这里部分代码省略.........