mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Module 'commands'
 | 
						|
#
 | 
						|
# Various tools for executing commands and looking at their output and status.
 | 
						|
#
 | 
						|
# NB This only works (and is only relevant) for UNIX.
 | 
						|
 | 
						|
 | 
						|
# Get 'ls -l' status for an object into a string
 | 
						|
#
 | 
						|
def getstatus(file):
 | 
						|
	return getoutput('ls -ld' + mkarg(file))
 | 
						|
 | 
						|
 | 
						|
# Get the output from a shell command into a string.
 | 
						|
# The exit status is ignored; a trailing newline is stripped.
 | 
						|
# Assume the command will work with '{ ... ; } 2>&1' around it..
 | 
						|
#
 | 
						|
def getoutput(cmd):
 | 
						|
	return getstatusoutput(cmd)[1]
 | 
						|
 | 
						|
 | 
						|
# Ditto but preserving the exit status.
 | 
						|
# Returns a pair (sts, output)
 | 
						|
#
 | 
						|
def getstatusoutput(cmd):
 | 
						|
	import os
 | 
						|
	pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
 | 
						|
	text = pipe.read()
 | 
						|
	sts = pipe.close()
 | 
						|
	if sts == None: sts = 0
 | 
						|
	if text[-1:] == '\n': text = text[:-1]
 | 
						|
	return sts, text
 | 
						|
 | 
						|
 | 
						|
# Make command argument from directory and pathname (prefix space, add quotes).
 | 
						|
#
 | 
						|
def mk2arg(head, x):
 | 
						|
	import os
 | 
						|
	return mkarg(os.path.join(head, x))
 | 
						|
 | 
						|
 | 
						|
# Make a shell command argument from a string.
 | 
						|
# Return a string beginning with a space followed by a shell-quoted
 | 
						|
# version of the argument.
 | 
						|
# Two strategies: enclose in single quotes if it contains none;
 | 
						|
# otherwise, enclose in double quotes and prefix quotable characters
 | 
						|
# with backslash.
 | 
						|
#
 | 
						|
def mkarg(x):
 | 
						|
	if '\'' not in x:
 | 
						|
		return ' \'' + x + '\''
 | 
						|
	s = ' "'
 | 
						|
	for c in x:
 | 
						|
		if c in '\\$"`':
 | 
						|
			s = s + '\\'
 | 
						|
		s = s + c
 | 
						|
	s = s + '"'
 | 
						|
	return s
 |