উত্তর:
এই উত্তরটি সূচিত করে optparse
যা পুরানো পাইথন সংস্করণগুলির জন্য উপযুক্ত। পাইথন ২.7 এবং তদূর্ধ্বের জন্য, argparse
প্রতিস্থাপন করে optparse
। আরও তথ্যের জন্য এই উত্তর দেখুন ।
অন্যান্য লোকেরা যেমন উল্লেখ করেছে, আপনি গিওপ্টের চেয়ে অপ্টপার্স নিয়ে যাওয়াই ভাল। গেটপট হ'ল স্ট্যান্ডার্ড গেওপ্ট (3) সি লাইব্রেরি ফাংশনগুলির এক থেকে এক ম্যাপিং, এবং এটি ব্যবহার করা খুব সহজ নয়।
অপ্টপার্স, যদিও আরও কিছুটা ভার্বোজ হয়ে গেছে, পরবর্তীকালে প্রসারিত করার জন্য এটি আরও ভাল কাঠামোগত এবং সহজ।
আপনার পার্সারে একটি বিকল্প যুক্ত করতে এখানে একটি সাধারণ লাইন রয়েছে:
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
এটি নিজের পক্ষে কথা বলছে; প্রসেসিংয়ের সময়, এটি বিকল্প হিসাবে -q বা - প্রশ্নকে গ্রহণ করবে, যুক্তিটি কোয়েরি বলে একটি বৈশিষ্ট্যে সংরক্ষণ করবে এবং যদি আপনি এটি নির্দিষ্ট না করেন তবে একটি ডিফল্ট মান থাকে। এটি স্ব-ডকুমেন্টিংয়েও রয়েছে যে আপনি সাহায্যের যুক্তিটি ঘোষণা করেন (যা -h / - সাহায্যের সাথে চালানোর সময় ব্যবহৃত হবে) ঠিক সেখানে বিকল্পটি রয়েছে।
সাধারণত আপনি আপনার যুক্তিগুলি এর সাথে পার্স করুন:
options, args = parser.parse_args()
এটি, ডিফল্টরূপে, স্ক্রিপ্টে পাস করা স্ট্যান্ডার্ড আর্গুমেন্টগুলি (পার্সোনাল সার্ভিস। আরজিভি [1:]) পার্স করবে
অপশন.কিউরিটি তখন আপনি স্ক্রিপ্টে যে মানটি দিয়েছিলেন সেট করে সেট করা হবে।
আপনি কেবল পার্সার তৈরি করেন
parser = optparse.OptionParser()
এগুলি আপনার প্রয়োজনীয় সমস্ত বেসিক। এখানে একটি সম্পূর্ণ পাইথন স্ক্রিপ্ট যা এটি দেখায়:
import optparse
parser = optparse.OptionParser()
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
options, args = parser.parse_args()
print 'Query string:', options.query
পাইথনের 5 টি লাইন যা আপনাকে বেসিকগুলি দেখায়।
এটিকে নমুনা.পিতে সংরক্ষণ করুন এবং একবার দিয়ে এটি চালান
python sample.py
এবং একবার সঙ্গে
python sample.py --query myquery
এর বাইরে, আপনি দেখতে পাবেন যে অপ্ট পার্সিকে প্রসারিত করা খুব সহজ। আমার একটি প্রকল্পে, আমি একটি কমান্ড ক্লাস তৈরি করেছি যা আপনাকে একটি কমান্ড ট্রিতে সহজেই সাবকম্যান্ডগুলি বাসাতে দেয়। এটি এক সাথে শৃঙ্খলাবদ্ধ কমান্ডগুলিতে অপ্টপারস ভারী ব্যবহার করে। এটি এমন কিছু নয় যা আমি কয়েকটি লাইনে সহজেই ব্যাখ্যা করতে পারি না, তবে মূল শ্রেণীর জন্য আমার সংগ্রহশালার পাশাপাশি এটিকে ব্যবহার করে এমন একটি শ্রেণি এবং অপশন পার্সার নির্বিঘ্নে নির্দ্বিধায় অনুভব করতে পারি
-mcProfile -o program.prof
তবে এগ্রপার্সার এই আর্গগুলি ক্যাপচার করছে, আমি কীভাবে এই অরগানগুলিকে পাইথন এক্সে পাস করব ???
argparse
যাবার উপায় এটি কীভাবে ব্যবহার করবেন তার একটি সংক্ষিপ্তসার এখানে দেওয়া হল:
1) সূচনা
import argparse
# Instantiate the parser
parser = argparse.ArgumentParser(description='Optional app description')
2) যুক্তি যুক্ত করুন
# Required positional argument
parser.add_argument('pos_arg', type=int,
help='A required integer positional argument')
# Optional positional argument
parser.add_argument('opt_pos_arg', type=int, nargs='?',
help='An optional integer positional argument')
# Optional argument
parser.add_argument('--opt_arg', type=int,
help='An optional integer argument')
# Switch
parser.add_argument('--switch', action='store_true',
help='A boolean switch')
3) পার্স
args = parser.parse_args()
4) অ্যাক্সেস
print("Argument values:")
print(args.pos_arg)
print(args.opt_pos_arg)
print(args.opt_arg)
print(args.switch)
5) মান পরীক্ষা করুন
if args.pos_arg > 10:
parser.error("pos_arg cannot be larger than 10")
সঠিক ব্যবহার:
$ ./app 1 2 --opt_arg 3 --switch
Argument values:
1
2
3
True
ভুল যুক্তি:
$ ./app foo 2 --opt_arg 3 --switch
usage: convert [-h] [--opt_arg OPT_ARG] [--switch] pos_arg [opt_pos_arg]
app: error: argument pos_arg: invalid int value: 'foo'
$ ./app 11 2 --opt_arg 3
Argument values:
11
2
3
False
usage: app [-h] [--opt_arg OPT_ARG] [--switch] pos_arg [opt_pos_arg]
convert: error: pos_arg cannot be larger than 10
সম্পূর্ণ সহায়তা:
$ ./app -h
usage: app [-h] [--opt_arg OPT_ARG] [--switch] pos_arg [opt_pos_arg]
Optional app description
positional arguments:
pos_arg A required integer positional argument
opt_pos_arg An optional integer positional argument
optional arguments:
-h, --help show this help message and exit
--opt_arg OPT_ARG An optional integer argument
--switch A boolean switch
২০১২ সাল থেকে ডকপট নামক যুক্তি পার্সিংয়ের জন্য খুব সহজ, শক্তিশালী এবং সত্যই শীতল মডিউল রয়েছে । এখানে এর দস্তাবেজ থেকে নেওয়া একটি উদাহরণ:
"""Naval Fate.
Usage:
naval_fate.py ship new <name>...
naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
naval_fate.py ship shoot <x> <y>
naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
naval_fate.py (-h | --help)
naval_fate.py --version
Options:
-h --help Show this screen.
--version Show version.
--speed=<kn> Speed in knots [default: 10].
--moored Moored (anchored) mine.
--drifting Drifting mine.
"""
from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__, version='Naval Fate 2.0')
print(arguments)
তাই এই এটি হল: কোডের 2 লাইন প্লাস আপনার ডক স্ট্রিংটি হয় অপরিহার্য এবং আপনি পেতে আপনার আর্গুমেন্ট পার্স এবং আপনার আর্গুমেন্ট বস্তু পাওয়া যায়।
2017 সাল থেকে পাইথন-ফায়ার নামে আরও একটি দুর্দান্ত মডিউল রয়েছে । এটি আপনার শূন্য আর্গুমেন্ট পার্সিংয়ের সাথে আপনার কোডের জন্য একটি সিএলআই ইন্টারফেস তৈরি করতে পারে। এখানে ডকুমেন্টেশন থেকে একটি সাধারণ উদাহরণ দেওয়া হয়েছে (এই ছোট প্রোগ্রামটি double
কমান্ড লাইনে ফাংশনটি প্রকাশ করে ):
import fire
class Calculator(object):
def double(self, number):
return 2 * number
if __name__ == '__main__':
fire.Fire(Calculator)
কমান্ড লাইন থেকে, আপনি চালাতে পারেন:
> calculator.py double 10
20
> calculator.py double --number=15
30
আমি ক্লিক পছন্দ । এটি ম্যানেজিং অপশনগুলি বিমূর্ত করে এবং "(...) প্রয়োজনীয় কম ছোট কোডের সাথে একটি কমপোজযোগ্য উপায়ে সুন্দর কমান্ড লাইন ইন্টারফেস তৈরি করতে দেয়"।
এখানে ব্যবহারের উদাহরণ:
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
এটি স্বয়ংক্রিয়ভাবে সুন্দর বিন্যাসিত সহায়তা পৃষ্ঠা তৈরি করে:
$ python hello.py --help
Usage: hello.py [OPTIONS]
Simple program that greets NAME for a total of COUNT times.
Options:
--count INTEGER Number of greetings.
--name TEXT The person to greet.
--help Show this message and exit.
খুব সুন্দর সবাই প্রত্যাহার ব্যবহার করছে
এখানে নথির উদাহরণ কোডটি রয়েছে:
import getopt, sys
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError:
# print help information and exit:
usage()
sys.exit(2)
output = None
verbose = False
for o, a in opts:
if o == "-v":
verbose = True
if o in ("-h", "--help"):
usage()
sys.exit()
if o in ("-o", "--output"):
output = a
সুতরাং এক কথায়, এখানে এটি কীভাবে কাজ করে তা।
আপনার কাছে দুটি ধরণের বিকল্প রয়েছে। যাঁরা যুক্তি গ্রহণ করছেন, এবং যাঁরা ঠিক সুইচের মতো।
sys.argv
char** argv
সি এর মতো আপনার সি এর মতো আপনি প্রথম উপাদানটি এড়িয়ে যান যা আপনার প্রোগ্রামের নাম এবং কেবলমাত্র যুক্তিগুলি বিশ্লেষণ করে:sys.argv[1:]
Getopt.getopt
আপনি যুক্তি অনুসারে যে নিয়ম দিয়েছেন তা অনুসারে এটিকে বিশ্লেষণ করবে।
"ho:v"
এখানে সংক্ষিপ্ত আর্গুমেন্ট বর্ণনা -ONELETTER
। :
মানে যে-o
একটি আর্গুমেন্ট গ্রহণ করে।
শেষ পর্যন্ত ["help", "output="]
দীর্ঘ আর্গুমেন্ট ( --MORETHANONELETTER
) বর্ণনা করে । দ্য=
আউটপুট পর আবার আউটপুট এক আর্গুমেন্ট গ্রহণ মানে।
ফলাফলটি দম্পতির একটি তালিকা (বিকল্প, যুক্তি)
যদি কোনও বিকল্প কোনও যুক্তি গ্রহণ করে না (যেমন --help
এখানে)arg
অংশটি খালি স্ট্রিং। তারপরে আপনি সাধারণত এই তালিকায় লুপ করতে এবং উদাহরণ হিসাবে যেমন বিকল্পের নামটি পরীক্ষা করতে চান।
আমি আশা করি এটি আপনাকে সাহায্য করেছে
getopt
পাইথন এর নতুন সংস্করণে এই উত্তর তারিখ সর্বস্বান্ত আউট হয়েছে।
getopt
এখনও অবচয় করা হয়নি ... তবে এর নথিতে বলা হয়েছে যে এটি মূলত সি getopt()
ফাংশনের সাথে পরিচিত ব্যবহারকারীদের জন্য সরবরাহ করা হয়েছে , এবং স্বীকার করে যে অন্যান্য ব্যবহারকারীর পক্ষে argparse
এটি একটি আরও ভাল সমাধান হতে পারে, "কম কোড লিখতে এবং পাওয়ার অনুমতি দেয়" আরও ভাল সহায়তা এবং ত্রুটির বার্তা "।
ব্যবহার করুন optparse
যা স্ট্যান্ডার্ড লাইব্রেরির সাথে আসে। উদাহরণ স্বরূপ:
#!/usr/bin/env python
import optparse
def main():
p = optparse.OptionParser()
p.add_option('--person', '-p', default="world")
options, arguments = p.parse_args()
print 'Hello %s' % options.person
if __name__ == '__main__':
main()
উত্স: ইউনিক্স কমান্ড লাইন সরঞ্জাম তৈরি করতে পাইথন ব্যবহার করা
তবে পাইথন ২.7 হিসাবে অপ্টপার্সিকে হ্রাস করা হয়েছে, দেখুন: কেন অপ্ট পার্সির চেয়ে আরগপার্স ব্যবহার করবেন?
আপনার যদি প্রয়োজন হতে পারে তবে উইন 32 (2 কে, এক্সপি ইত্যাদি) এ ইউনিকোড আর্গুমেন্টগুলি ধরতে হলে এটি সাহায্য করতে পারে :
from ctypes import *
def wmain(argc, argv):
print argc
for i in argv:
print i
return 0
def startup():
size = c_int()
ptr = windll.shell32.CommandLineToArgvW(windll.kernel32.GetCommandLineW(), byref(size))
ref = c_wchar_p * size.value
raw = ref.from_address(ptr)
args = [arg for arg in raw]
windll.kernel32.LocalFree(ptr)
exit(wmain(len(args), args))
startup()
লাইটওয়েট কমান্ড লাইন যুক্তি ডিফল্ট
যদিও argparse
দুর্দান্ত এবং সম্পূর্ণ নথিভুক্ত কমান্ড লাইন সুইচ এবং উন্নত বৈশিষ্ট্যগুলির সঠিক উত্তর, আপনি খুব সহজভাবে সরল অবস্থানগত আর্গুমেন্টগুলি পরিচালনা করতে ফাংশন আর্গুমেন্ট ডিফল্ট ব্যবহার করতে পারেন।
import sys
def get_args(name='default', first='a', second=2):
return first, int(second)
first, second = get_args(*sys.argv)
print first, second
'নাম' যুক্তিটি স্ক্রিপ্টের নাম ক্যাপচার করে এবং ব্যবহৃত হয় না। পরীক্ষার আউটপুটটি এর মতো দেখাচ্ছে:
> ./test.py
a 2
> ./test.py A
A 2
> ./test.py A 20
A 20
সরল স্ক্রিপ্টগুলির জন্য যেখানে আমি কিছু ডিফল্ট মান চাই, আমি এটি যথেষ্ট পরিমাণে খুঁজে পাই। আপনি রিটার্ন মানগুলিতে কিছু ধরণের জবরদস্তি অন্তর্ভুক্ত করতে চাইতে পারেন বা কমান্ড লাইনের মানগুলি স্ট্রিং হবে।
আমি getopt থেকে optparse পছন্দ। এটি অত্যন্ত ঘোষণামূলক: আপনি এটির বিকল্পগুলি এবং তাদের প্রভাবগুলির নামগুলি উল্লেখ করুন (উদাহরণস্বরূপ, বুলিয়ান ক্ষেত্র নির্ধারণ), এবং এটি আপনাকে আপনার স্পেসিফিকেশন অনুসারে জনবহুল একটি অভিধান ফিরিয়ে দেয়।
আমি মনে করি বৃহত্তর প্রকল্পগুলির জন্য সর্বোত্তম উপায় হ'ল অপ্ট পার্স, তবে আপনি যদি কোনও সহজ উপায় সন্ধান করেন তবে সম্ভবত http://werkzeug.pocoo.org/docamentation/script আপনার জন্য কিছু।
from werkzeug import script
# actions go here
def action_foo(name=""):
"""action foo does foo"""
pass
def action_bar(id=0, title="default title"):
"""action bar does bar"""
pass
if __name__ == '__main__':
script.run()
সুতরাং মূলত প্রতিটি ফাংশন অ্যাকশন_ * কমান্ড লাইনের সামনে প্রকাশিত হয় এবং একটি দুর্দান্ত সহায়তা বার্তা নিখরচায় উত্পন্ন হয়।
python foo.py
usage: foo.py <action> [<options>]
foo.py --help
actions:
bar:
action bar does bar
--id integer 0
--title string default title
foo:
action foo does foo
--name string
declarative_parser
। অবশ্যই, যদি এক werkzeug সঙ্গে কাজ করছে, এটা ভাল রাখা হতে পারে werkzung.script
। যাইহোক, আমি এই জাতীয় পদ্ধতির একটি বিশাল অনুরাগী।
আরগপার্স কোডটি বাস্তব প্রয়োগের কোডের চেয়ে দীর্ঘতর হতে পারে!
এই সমস্যাটি আমি সর্বাধিক জনপ্রিয় আর্গুমেন্ট পার্সিং বিকল্পগুলির সাথে দেখতে পাই তা হ'ল যদি আপনার পরামিতিগুলি কেবলমাত্র বিনয়ী হয় তবে তাদের নথির কোডটি তাদের সরবরাহিত সুবিধার তুলনায় অস্বাভাবিকভাবে বড় হয়ে যায়।
যুক্তি পার্সিংয়ের দৃশ্যে একটি আপেক্ষিক নতুন আগত ব্যক্তি (আমার মনে হয়) প্ল্যাক ।
এটি আরগপার্সের সাথে কিছু স্বীকৃত ট্রেড-অফ করে, তবে ইনলাইন ডকুমেন্টেশন এবং কেবল main()
টাইপ ফাংশন ফাংশন জুড়ে মোড়ক ব্যবহার করে:
def main(excel_file_path: "Path to input training file.",
excel_sheet_name:"Name of the excel sheet containing training data including columns 'Label' and 'Description'.",
existing_model_path: "Path to an existing model to refine."=None,
batch_size_start: "The smallest size of any minibatch."=10.,
batch_size_stop: "The largest size of any minibatch."=250.,
batch_size_step: "The step for increase in minibatch size."=1.002,
batch_test_steps: "Flag. If True, show minibatch steps."=False):
"Train a Spacy (http://spacy.io/) text classification model with gold document and label data until the model nears convergence (LOSS < 0.5)."
pass # Implementation code goes here!
if __name__ == '__main__':
import plac; plac.call(main)
কনসোলেগগুলি এখানে উল্লেখ করার যোগ্য। এটা ব্যবহার করা খুব সহজ। এটা দেখ:
from consoleargs import command
@command
def main(url, name=None):
"""
:param url: Remote URL
:param name: File name
"""
print """Downloading url '%r' into file '%r'""" % (url, name)
if __name__ == '__main__':
main()
এখন কনসোলে:
% python demo.py --help
Usage: demo.py URL [OPTIONS]
URL: Remote URL
Options:
--name -n File name
% python demo.py http://www.google.com/
Downloading url ''http://www.google.com/'' into file 'None'
% python demo.py http://www.google.com/ --name=index.html
Downloading url ''http://www.google.com/'' into file ''index.html''
এখানে একটি পদ্ধতি রয়েছে, একটি লাইব্রেরি নয়, যা আমার পক্ষে কাজ করে বলে মনে হচ্ছে।
এখানে লক্ষ্যগুলি সংশ্লেষিত হতে হবে, প্রতিটি যুক্তি একটি একক লাইন দ্বারা পার্স করা হয়, পাঠযোগ্যতার জন্য আর্কস লাইন করে দেয়, কোডটি সহজ এবং কোনও বিশেষ মডিউল (কেবলমাত্র ওএস + সিএস) এর উপর নির্ভর করে না, অনুপস্থিত বা অজানা আর্গুমেন্ট সম্পর্কে গ্রেফতার করে সতর্ক করে দেয় , / রেঞ্জ () লুপের জন্য একটি সাধারণ ব্যবহার করুন এবং অজগর ২.x এবং 3.x জুড়ে কাজ করে
দুটি টগল পতাকা (-d, -v) এবং আর্গুমেন্ট (-i xxx এবং -o xxx) দ্বারা নিয়ন্ত্রিত দুটি মান দেখানো হয়েছে।
import os,sys
def HelpAndExit():
print("<<your help output goes here>>")
sys.exit(1)
def Fatal(msg):
sys.stderr.write("%s: %s\n" % (os.path.basename(sys.argv[0]), msg))
sys.exit(1)
def NextArg(i):
'''Return the next command line argument (if there is one)'''
if ((i+1) >= len(sys.argv)):
Fatal("'%s' expected an argument" % sys.argv[i])
return(1, sys.argv[i+1])
### MAIN
if __name__=='__main__':
verbose = 0
debug = 0
infile = "infile"
outfile = "outfile"
# Parse command line
skip = 0
for i in range(1, len(sys.argv)):
if not skip:
if sys.argv[i][:2] == "-d": debug ^= 1
elif sys.argv[i][:2] == "-v": verbose ^= 1
elif sys.argv[i][:2] == "-i": (skip,infile) = NextArg(i)
elif sys.argv[i][:2] == "-o": (skip,outfile) = NextArg(i)
elif sys.argv[i][:2] == "-h": HelpAndExit()
elif sys.argv[i][:1] == "-": Fatal("'%s' unknown argument" % sys.argv[i])
else: Fatal("'%s' unexpected" % sys.argv[i])
else: skip = 0
print("%d,%d,%s,%s" % (debug,verbose,infile,outfile))
NextArg () এর লক্ষ্য হ'ল নিখোঁজ হওয়া ডেটাগুলি পরীক্ষা করার সময় পরবর্তী যুক্তিটি ফিরিয়ে আনা, এবং NextArg () ব্যবহার করার সময় লুপটি এড়িয়ে যায়, পতাকাটিকে একটি রেখায় পার্স করে রেখে।
প্রয়োজনীয় অবস্থানগত যুক্তি এবং forচ্ছিক আর্গুমেন্টের অনুমতি দেওয়ার জন্য আমি এর্কোর পদ্ধতির প্রসারিত করেছি। এগুলি -d, -v ইত্যাদি যুক্তিগুলির পূর্ববর্তী হওয়া উচিত।
অবস্থানগত এবং alচ্ছিক আর্গুমেন্ট যথাক্রমে প্যাসআরগ (i) এবং OptArg (i, ডিফল্ট) দিয়ে পুনরুদ্ধার করা যেতে পারে। যখন একটি alচ্ছিক যুক্তি খুঁজে পাওয়া যায় তখন বিকল্পগুলির সন্ধানের প্রারম্ভিক অবস্থানটি (উদাহরণস্বরূপ -i) একটি 'অপ্রত্যাশিত' মারাত্মক মারাত্মক কারণ এড়াতে 1 এগিয়ে চলে যায়।
import os,sys
def HelpAndExit():
print("<<your help output goes here>>")
sys.exit(1)
def Fatal(msg):
sys.stderr.write("%s: %s\n" % (os.path.basename(sys.argv[0]), msg))
sys.exit(1)
def NextArg(i):
'''Return the next command line argument (if there is one)'''
if ((i+1) >= len(sys.argv)):
Fatal("'%s' expected an argument" % sys.argv[i])
return(1, sys.argv[i+1])
def PosArg(i):
'''Return positional argument'''
if i >= len(sys.argv):
Fatal("'%s' expected an argument" % sys.argv[i])
return sys.argv[i]
def OptArg(i, default):
'''Return optional argument (if there is one)'''
if i >= len(sys.argv):
Fatal("'%s' expected an argument" % sys.argv[i])
if sys.argv[i][:1] != '-':
return True, sys.argv[i]
else:
return False, default
### MAIN
if __name__=='__main__':
verbose = 0
debug = 0
infile = "infile"
outfile = "outfile"
options_start = 3
# --- Parse two positional parameters ---
n1 = int(PosArg(1))
n2 = int(PosArg(2))
# --- Parse an optional parameters ---
present, a3 = OptArg(3,50)
n3 = int(a3)
options_start += int(present)
# --- Parse rest of command line ---
skip = 0
for i in range(options_start, len(sys.argv)):
if not skip:
if sys.argv[i][:2] == "-d": debug ^= 1
elif sys.argv[i][:2] == "-v": verbose ^= 1
elif sys.argv[i][:2] == "-i": (skip,infile) = NextArg(i)
elif sys.argv[i][:2] == "-o": (skip,outfile) = NextArg(i)
elif sys.argv[i][:2] == "-h": HelpAndExit()
elif sys.argv[i][:1] == "-": Fatal("'%s' unknown argument" % sys.argv[i])
else: Fatal("'%s' unexpected" % sys.argv[i])
else: skip = 0
print("Number 1 = %d" % n1)
print("Number 2 = %d" % n2)
print("Number 3 = %d" % n3)
print("Debug = %d" % debug)
print("verbose = %d" % verbose)
print("infile = %s" % infile)
print("outfile = %s" % outfile)