strange behavior with os.system

Discussion in 'Python' started by kmw, Jun 16, 2009.

  1. kmw

    kmw Guest

    Hi,

    I wanted to write a simple script (in 5 minutes or so) which replaces
    the option '+1' given to the command 'sort' by '-k 2' and than runs
    'sort' with the modified argument list. After two hours I am giving up
    and ask you for help. This is what I tried (please excuse the verbose
    code, it is due to my various efforts to understand the error):

    #!/usr/bin/python
    import sys, os, re
    arguments = sys.argv[0]
    for i in sys.argv[1:]:
    arguments += " " + i
    p = re.compile ( "(\+(\d+))" )
    m = p.search ( arguments )
    print type ( m )
    m_list = list ( m.groups () )
    print type ( m_list )
    from1 = str ( m_list[0] )
    to1 = "-k " + str ( int ( m_list[1] ) + 1 )
    cmd1 = str ( arguments.replace ( from1, to1 ) )
    print cmd1
    os.system ( cmd1 )

    Now, this is what I get (on three different machines with different
    versions of python):
    <type '_sre.SRE_Match'>
    <type 'list'>
    ../sort -F -k 2 -e
    <type 'NoneType'>
    Traceback (most recent call last):
    File "./sort", line 9, in <module>
    m_list = list ( m.groups () )
    AttributeError: 'NoneType' object has no attribute 'groups'

    Please note the unrequested output of '<type 'NoneType'>'. The strange
    thing about this all is the fact that the whole thing works as
    expected when typed into the interpreter. I would be glad if anyone
    could help.

    Best regards,
    Kay
     
    kmw, Jun 16, 2009
    #1
    1. Advertisements

  2. kmw

    MRAB Guest

    Shorter:

    arguments = " ".join(sys.argv)
    This looks for a "+" followed by digits.
    No "+"s, so the p.search(arguments) returns None.
     
    MRAB, Jun 16, 2009
    #2
    1. Advertisements

  3. MRAB has already given you some insight, I hope.
    But are you aware that you are calling your own program again?
    Or did you want to call the standard sort program? In that case you
    shouldn't call ./sort as it is in argv[0], but just sort (assuming '.'
    is not in your PATH) or the full path, like /usr/bin/sort.
     
    Piet van Oostrum, Jun 16, 2009
    #3
  4. kmw

    kmw Guest

    That's it. I am calling my own program and not coreutils' sort, what
    explains the unrequested output. Many thanks.

    Cheers,
    Kay

     
    kmw, Jun 17, 2009
    #4
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.