4

Sorry I'm kind of a noob at this:

Basically I've downloaded this package that deals with text files that is run from the terminal, but the command I need takes in two arguments. I also need to do this many times (5000+).

I need to get these arguments with a python script, and can loop it many times using python. So could I get the arguments within the python script, run the command-line line, and loop it? How?

Thanks!

3
  • This might be better off on stackoverflow.com because it is not specifically related to Ubuntu. Jun 12, 2013 at 13:12
  • @confoosed -- You need to edit to add "I've downloaded this package to my Ubuntu box...". </halfserious>
    – belacqua
    Jun 12, 2013 at 21:31
  • Are you saying you need to have python actually execute built-in shell/bash functions? That can be done (e.g., see V's popen example), but you could use some more details in the question.
    – belacqua
    Jun 12, 2013 at 21:33

2 Answers 2

5

Here's a fish...

import popen2, sys

def loopy_subprocess(arga, argb, iterations, command = 'echo'):
    for i in range(int(iterations)):
        p = popen2.Popen4((command, arga, argb))
        p.wait()
        print(p.fromchild.readlines())

if __name__ == '__main__':
    try:
        arga = sys.argv[1]
        argb = sys.argv[2]
        iterations = sys.argv[3]
    except:
        print("You didn't supply enough arguments\n"+\
              "Usage: python script.py arga argb iterations\n"+\
              "Warning - unsafe.  No input validation and doesn't account for spaces in arguments\n"+\
              "Optionally supply the command to be run as a final argument\n")
        quit()
    try:
        command = sys.argv[4]
        loopy_subprocess(arga, argb, iterations, command)
    except:
        loopy_subprocess(arga, argb, iterations)
3
  • @belacqua - I could have used call but it doesn't support wait. i thought wait was necessary given that the want to run batches of 5000 (I also think threading is necessary, but the question doesn't merit a threading answer) blah blah blah. Jun 12, 2013 at 21:37
  • Change the popen2 calls to the subprocess module. popen2 and family are deprecated in Python 2 and removed from Python 3. Don't use quit() or exit(), they are added by site.py at runtime and do not work in all circumstances. Use sys.exit() or raise a SystemExit. Bonuspoint for using something like argparse.
    – Timo
    Jun 13, 2013 at 9:33
  • @Timo - feel free to edit the changes in... it won't bother me at all, and if it makes a better answer great. i guess old habits die hard. Jun 13, 2013 at 13:52
3

Probably the easiest way to do this is to access the command line arguments from within python and also do the loop within python. You could look into sys.argv from the sys module to access the command line arguments. If I recall correctly that should allow you to do something like:

python scriptname.py argument1 argument2

and then access the arguments within scriptname.py using

import sys
arg_1 = sys.argv[1]
arg_2 = sys.argv[2]

You could also develop a whole stack of commands easily with a tool like cliff (Command Line Interface Formulation Framework) .

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .