2015-04-27 2 views
1

Я работаю над скриптом, под которым будет запускаться какая-то подпрограмма. , например test.py является основной программой и при этом test1.py, test2.py, test3.pl будет работать, и мне нужно передать аргументы из основной программы (test.py) к test1.py и test2.py. Кроме того, аргументы должны быть в неизменном состоянии. переходя к другой программе.как передать аргументы argparse другой программе python в неизменном состоянии?

код: test.py

import argparse 
import subprocess 
import os 

commandLineArgumentParser = argparse.ArgumentParser() 
commandLineArgumentParser.add_argument("-fname", "--fname",help="first name") 
commandLineArgumentParser.add_argument("-lname","--lname", help="last name") 
commandLineArgumentParser.add_argument("-age","--age", help="age") 
commandLineArguments = commandLineArgumentParser.parse_args() 

fname = commandLineArguments.fname 
lname = commandLineArguments.lname 
age = commandLineArguments.age 

print "%s%s%s" %(fname,lname,age) 

Я бег программы по сильфонным командам:

python test.py -fname=abc -age=22 -lname='test a' 
or 
python test.py -fname="abc test" lname='val' -age=30 
or 
python test.py -age=45 -lname='abc aa' fname="abc" 
or 
python test.py -age=45 -lname="test" 

теперь я хочу, чтобы захватить аргумент часть в неизменном состоянии и поставить в одном переменной, то мы легко сможем легко передать аргументы в программу.

Для первой команды переменный проведет

-fname=abc -age=22 -lname='test a' 

для 2-й команды

-fname="abc test" lname='val' -age=30 

Я пытался захватить аргументы с помощью сильфона кода, но квоты отсутствуют по сценарию.

my_argu='' 
if len(sys.argv) >1: 
    for x in sys.argv: 
      if x == sys.argv[0]: 
        continue 
      if x == sys.argv[len(sys.argv)-1]: 
        my_argu =my_argu+x 
      else: 
        my_argu = my_argu+x+' ' 
print "%s" %(my_argu) 

для

python test.py -fname="abc test" lname='val' -age=30 

на выходе:

abc testval30 

-fname=abc test lname=val -age=30 

как вы можете видеть квоты отсутствуют. Так что мне нужна помощь в его решении.

+0

Это ошибка, что у вас есть LName с и без ведущего дефиса? – deets

+0

Это была моя ошибка .... извините за это ... Я исправил эту ошибку – Arijit

+0

Как вы выполняете другую программу? – ThinkChaos

ответ

-2
import sys 
print (' '.join (sys.argv)) 
+0

Это не будет работать, если аргумент содержит пробелы. Кроме того, вы сохранили 'argv [0]'. – ThinkChaos

0

Похоже, вы должны вытащить все это вместе в одной обертке и называть это вместо этого.

# wrapper.py 

import test, test1, test2, test3 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument("-fname", "--fname",help="first name") 
parser.add_argument("-lname","--lname", help="last name") 
parser.add_argument("-age","--age", help="age") 
cli_args = parser.parse_args() 

test.run(cli_args) 
test1.run(cli_args) 
test2.run(cli_args) 
test3.run(cli_args) 

Тогда в каждом из ваших testN.py с ...

# test.py 

def run(cli_args): 
    print("Your name is {} {}".format(cli_args.fname, cli_args.lname)) 
    # or whatever your program does.... 

Затем сделайте:

$ python wrapper.py --fname Adam --lname Smith 
Смежные вопросы