Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

"""Execute shell commands via os.popen() and return status, output. 

 

Interface summary: 

 

       import commands 

 

       outtext = commands.getoutput(cmd) 

       (exitstatus, outtext) = commands.getstatusoutput(cmd) 

       outtext = commands.getstatus(file)  # returns output of "ls -ld file" 

 

A trailing newline is removed from the output string. 

 

Encapsulates the basic operation: 

 

      pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r') 

      text = pipe.read() 

      sts = pipe.close() 

 

[Note:  it would be nice to add functions to interpret the exit status.] 

""" 

from warnings import warnpy3k 

warnpy3k("the commands module has been removed in Python 3.0; " 

         "use the subprocess module instead", stacklevel=2) 

del warnpy3k 

 

__all__ = ["getstatusoutput","getoutput","getstatus"] 

 

# 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 output of "ls -ld <file>" in a string.""" 

    import warnings 

    warnings.warn("commands.getstatus() is deprecated", DeprecationWarning, 2) 

    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 output (stdout or stderr) of executing cmd in a shell.""" 

    return getstatusoutput(cmd)[1] 

 

 

# Ditto but preserving the exit status. 

# Returns a pair (sts, output) 

# 

def getstatusoutput(cmd): 

    """Return (status, output) of executing cmd in a shell.""" 

    import os 

    pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r') 

    text = pipe.read() 

    sts = pipe.close() 

    if sts is 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