Нужна помощь со скриптом Python с командами Bash - PullRequest
0 голосов
/ 01 мая 2011

Я скопировал этот скрипт из интернета, но не знаю, как его использовать. Я новичок в Python, поэтому, пожалуйста, помогите. Когда я выполню это, используя ./test.py тогда я могу видеть только

usage: py4sa [option]

A unix toolbox

options:
  --version      show program's version number and exit
  -h, --help     show this help message and exit
  -i, --ip       gets current IP Address
  -u, --usage    gets disk usage of homedir
  -v, --verbose  prints verbosely

когда я набираю py4sa, то это говорит, что команда bash не найдена Полный сценарий:

#!/usr/bin/env python
import subprocess
import optparse
import re

#Create variables out of shell commands
#Note triple quotes can embed Bash

#You could add another bash command here
#HOLDING_SPOT="""fake_command"""

#Determines Home Directory Usage in Gigs
HOMEDIR_USAGE = """
du -sh $HOME | cut -f1
"""

#Determines IP Address
IPADDR = """
/sbin/ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1
"""

#This function takes Bash commands and returns them
def runBash(cmd):
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    out = p.stdout.read().strip()
    return out  #This is the stdout from the shell command

VERBOSE=False
def report(output,cmdtype="UNIX COMMAND:"):
   #Notice the global statement allows input from outside of function
   if VERBOSE:
       print "%s: %s" % (cmdtype, output)
   else:
       print output

#Function to control option parsing in Python
def controller():
    global VERBOSE
    #Create instance of OptionParser Module, included in Standard Library
    p = optparse.OptionParser(description='A unix toolbox',
                                            prog='py4sa',
                                            version='py4sa 0.1',
                                            usage= '%prog [option]')
    p.add_option('--ip','-i', action="store_true", help='gets current IP Address')
    p.add_option('--usage', '-u', action="store_true", help='gets disk usage of homedir')
    p.add_option('--verbose', '-v',
                action = 'store_true',
                help='prints verbosely',
                default=False)

    #Option Handling passes correct parameter to runBash
    options, arguments = p.parse_args()
    if options.verbose:
        VERBOSE=True
    if options.ip:
        value = runBash(IPADDR)
        report(value,"IPADDR")
    elif options.usage:
        value = runBash(HOMEDIR_USAGE)
        report(value, "HOMEDIR_USAGE")
    else:
        p.print_help()

#Runs all the functions
def main():
    controller()

#This idiom means the below code only runs when executed from command line
if __name__ == '__main__':
    main()

Ответы [ 3 ]

2 голосов
/ 01 мая 2011

Мне кажется, что вы сохранили скрипт под другим именем: test.py, а не py4sa. Поэтому печатать ./test.py, как и вы, правильно для вас. Однако программе требуются аргументы, поэтому вам необходимо ввести один из параметров, перечисленных в разделе «Использование».

Обычно 'py4sa [OPTIONS]' означает, что OPTIONS является необязательным, но, глядя на код, мы видим, что это не так:

if options.verbose:
    # ...
if options.ip:
    # ...
elif options.usage:
    # ...
else:
    # Here's a "catch all" in case no options are supplied. 
    # It will show the help text you get:
    p.print_help()

Обратите внимание, что программа, вероятно, не будет распознана bash, даже если вы переименуете ее в py4sa, поскольку текущий каталог часто отсутствует в PATH bash. Там написано «использование: py4sa (..)», потому что это жестко запрограммировано в программе.

0 голосов
/ 01 мая 2011

вы запускаете скрипт Python с использованием интерпретатора, поэтому

$ python py4sa

0 голосов
/ 01 мая 2011

Скрипт называется «test.py». Либо вызовите его как таковой, либо переименуйте в «py4sa».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...