👤
Home Man
Search
Today's Posts
Register

Post questions about C, C++, Java, SQL, and other programming languages here.

Python passing filename through argument

Tags
argument, filename, python

👤 Login to reply

 
Thread Tools Search this Thread
# 1  
Old 08-10-2015
Python passing filename through argument

Hello,
A python beginner question on passing filename thru argument. My code is:

Code:
#!/usr/bin/python

import sys, getopt
import os

def main(argv):
    try:
        opts, args = getopt.getopt(sys.argv[1:],"hi:o:ce", ["help", "inputfile", "outputdir", "containment", "error_tolerance"])
    except getopt.GetoptError:
        usage()
        print("Usage: %s -i inputfile -o outputdirectory -c containment -e error_tolerance" % sys.argv[0])
        sys.exit(2)

    for opt, arg in opts:
        if opt == '-h':
           print 'this_script.py -i <inputfile> -o <outputdir> -c <containment> -e <error_tolerance>'
           sys.exit()
        elif opt in ("-i", "--infile"):
           inputfile = arg    #Is this the right way to pass filename thru argument?
        elif opt in ("-o", "--outdir"):
           outputdir = arg
        elif opt == '-c':
           containment = arg
        elif opt == '-e':
           error_pct = arg

if __name__ == '__main__':
    main(sys.argv[1])


def get_overlap_data(m4_filename):
    containment_tolerance = containment
    permitted_error_pct = error_pct
    overlap_data = {}
    contained_reads = set()
    with open(m4_filename) as m4_f:
        for l in m4_f:
            # ......omitted
    return overlap_data, contained_reads

overlap_data, contained_reads = get_overlap_data(inputfile)   #This line always gave error
......

but I always got error as:
Code:
Traceback (most recent call last):
  File "learnpython01.py", line 123, in <module>
    overlap_data, contained_reads = get_overlap_data(inputfile)
NameError: name 'inputfile' is not defined

I was wondering what the right way it is to pass filename thru argument in python. Related lines are highlighted in red.
Thanks a lot!
# 2  
Old 08-10-2015
With python, error debuging starts at the bottom - with the 'last' error found
Also, to parse options, you should loop through the arguments, and use a case statement to identify the current option name 'opt' (which was retrieved from arg[v]).

Have a look at: info getopt and continue reading (PGDN).
Also checkout man getopt, to get a possible location for code Examples.

Hope this helps
# 3  
Old 08-10-2015
Note also that inputfile is only defined if a -i inputfile option is present on the command line.

Maybe you want to define it with a default value in case that option is not present. Or, if there is no reasonable default, print an error message and exit if no -i option was found while parsing the options.
# 4  
Old 08-10-2015
What I expected to have the script working in following command line:
Code:
python learnpython01.py -i infile -o outdir -c 500 -e 2

Could not find examples on handling file I/O stream.
I have difficulty to understand string[file] I/O stream here. In the example code, the function prototype is
def get_overlap_data(m4_filename):
and, calling of the function is by
overlap_data, contained_reads = get_overlap_data(inputfile)
whereinputfile = arg from argument parsing.
I am not sure what I have missed among the connections, if any stream is involved.
Thanks any way!

Last edited by yifangt; 08-10-2015 at 05:17 PM..
# 5  
Old 10-27-2015
The inputfile name is defined inside the function main, so it is out of scope when you're calling
Code:
overlap_data, contained_reads = get_overlap_data(inputfile)

, so you could just call get_overlap_data from inside of main, after handling all the args.
# 6  
Old 11-06-2015
I regret posting this naive questions before I read the book(s). After some more reading and found out one solution:
Code:
overlap_data, contained_reads = get_overlap_data(sys.argv[1])

Need more about getopt() and argparse (as Aia pointed out below) in python.
Thanks to all who replied.

Last edited by yifangt; 12-22-2015 at 12:44 PM..
# 7  
Old 11-07-2015
Try to learn about argparse instead of getopt.
Some documentation why getopt or optparse might not be the right solution.
The Following User Says Thank You to Aia For This Useful Post:
yifangt (12-22-2015)
👤 Login to reply

« Previous Thread | Next Thread »
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Passing a second argument MIA651 UNIX for Beginners Questions & Answers 4 3 Weeks Ago 05:36 PM
Using python with argument in TCSH autocompletion chistof Shell Programming and Scripting 5 09-05-2016 01:29 AM
**python : passing list as argument and updating in definition scriptscript Shell Programming and Scripting 5 08-12-2015 01:41 PM
Argument passing Roozo Shell Programming and Scripting 9 03-15-2013 06:19 AM
Help with passing argument dollypee Shell Programming and Scripting 7 11-22-2012 02:50 PM
Using GET, passing argument to bash Rhije Shell Programming and Scripting 5 09-26-2009 05:56 AM
passing Argument Shahul Shell Programming and Scripting 4 11-13-2008 07:50 AM
Argument passing using for or while loop jisha Shell Programming and Scripting 4 04-09-2008 12:21 AM
Thread Argument Passing narom Programming 2 01-19-2006 12:10 PM
pass argument to a filename jpprial UNIX for Dummies Questions & Answers 1 09-03-2001 03:12 PM


All times are GMT -4. The time now is 02:18 AM.



All times are GMT -4. The time now is 02:18 AM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
×
UNIX.COM Login
Username:
Password:  
Show Password