outputting a command to the terminal?
John Salerno
johnjsal at NOSPAMgmail.com
Mon Aug 14 12:51:36 EDT 2006
Steven Bethard wrote:
> John Salerno wrote:
>> Here's my new project: I want to write a little script that I can type
>> at the terminal like this:
>>
>> $ scriptname package1 [package2, ...]
>>
>> where scriptname is my module name and any subsequent arguments are
>> the names of Linux packages to install. Running the script as above
>> will create this line:
>>
>> sudo aptitude install package1 package2 ...
>>
>> It will run that line at the terminal so the package(s) will be
>> installed.
>>
>> Now, the extra functionality I want to add (otherwise I would just
>> install them normally!) is to save the package names to a text file so
>> I can now the names of programs I've manually installed, if I ever
>> want to check the list or remove packages.
>>
>> So creating the proper bash command (sudo aptitude install ...) is
>> easy, and writing the names to a file is easy. But I have two questions:
>>
>> 1. First of all, does Linux keep track of the packages you manually
>> install? If so, then I won't have to do this at all.
>>
>> 2. Assuming I write this, how do output the bash command to the
>> terminal? Is there a particular module that Python uses to interact
>> with the terminal window that I can use to send the install command to
>> the terminal?
>
>
> I don't know the answer to the first bit here, but I think the following
> should get you most of what you want as far as the second bit is concerned:
>
>
> ---------------------------- scriptname.py ----------------------------
> import argparse # http://argparse.python-hosting.com/
> import subprocess
> import sys
>
> def outputfile(filename):
> return open(filename, 'w')
>
> if __name__ == '__main__':
> # parse the command line arguments
> parser = argparse.ArgumentParser()
> parser.add_argument('packages', metavar='package', nargs='+',
> help='one of the packages to install')
> parser.add_argument('--save', type=outputfile, default=sys.stdout,
> help='a file to save the package names to')
> namespace = parser.parse_args()
>
> # call the command
> command = ['sudo', 'aptitude', 'install'] + namespace.packages
> subprocess.call(command)
>
> # write the package name file
> for package_name in namespace.packages:
> namespace.save.write('%s\n' % package_name)
> -----------------------------------------------------------------------
>
>
> $ scriptname.py -h
> usage: scriptname.py [-h] [--save SAVE] package [package ...]
>
> positional arguments:
> package one of the packages to install
>
> optional arguments:
> -h, --help show this help message and exit
> --save SAVE a file to save the package names to
>
>
>
> STeVe
yikes! I'll have to take some time to study this! I appreciate it. :)
More information about the Python-list
mailing list