/ / изпълнението на командния ред arg преминава в python, не работи - python

изпълнението на командния ред arg преминава в python, не работи - python

Аз съм много нов за Python. Иска ми се да мога да изпълня командния ред arg преминавайки в python като моя първи скрипт на python.

def main(argv):
try:
opts, args = getopt.getopt(argv, "hb:b:f", ["help", "bucket=", "folder"])
except getopt.GetoptError:
usage()
sys.exit(2)
s3 = get_files()
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-b", "--bucket"):
s3.bucketname = arg
elif opt in ("-f", "--folder"):
s3.foldername = arg
print("Came here" + s3.foldername)
s3.download_files()

В -f аргумент от командата е, където аз съм изправен пред проблема. За отстраняване на грешки аз използвах print изявление. Предавам аргументите по този начин:

./hello -b something -f /path

но за съжаление отпечатва:

Came here

Но foldername атрибут не получава никаква стойност. Къде съм направил грешката?

Благодаря предварително.

Отговори:

2 за отговор № 1

Argparse наистина е много по-прост начин за решаване на подобни проблеми

import argparse

if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-b", "--bucket", dest="bucketname", action="store")
parser.add_argument("-f", "--folder", dest="folder", action="store")
args = parser.parse_args("-b foo".split())
print args
args = parser.parse_args("-b foo -f /foo".split())
print args

Дава:

> Namespace(bucketname="foo", folder=None)
> Namespace(bucketname="foo", folder="/foo")

Което означава, че можете да пренапишете функцията си като:

import sys
import argparse

def main():
parser = argparse.ArgumentParser()
parser.add_argument("-b", "--bucket", dest="bucketname", action="store")
parser.add_argument("-f", "--folder", dest="folder", action="store")
args = parser.parse_args()
s3 = get_files()
s3.foldername = args.folder
s3.download_files()

Без по-нататъшна работа, резултатите от script.py --help е:

usage: script.py [-h] [-b BUCKETNAME] [-f FOLDER]

optional arguments:
-h, --help            show this help message and exit
-b BUCKETNAME, --bucket BUCKETNAME
-f FOLDER, --folder FOLDE

2 за отговор № 2

Забравихте знака за равенство след "папка", трябва да бъде getopt.getopt(argv, "hbf:", ["help", "bucket=", "folder="]), нали?

Отстъпът ви е неправилен и трябва да доведе до синтактична грешка. Трябва да бъде:

elif opt in ("-f", "--folder"):
s3.foldername = arg

Както други посочиха, argparse хубаво е.