2015-04-20 7 views
3

Я завязывания скрипт, который будет передавать argparse аргументы другой питонКак передать аргументы argparse другой программе python?

первый сценарий: t.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") 
commandLineArguments = commandLineArgumentParser.parse_args() 

fname = commandLineArguments.fname 
lname = commandLineArguments.lname 

print "%s\n%s" %(fname,lname) 

os.system("python test1.py") 

код test1.py находится ниже

import argparse 
import os 

print "test abc" 

Я хочу для передачи lname и fname значениям test1.py. Это их любой способ сделать это.

в приведенном выше коде, если я побежал

python t.py -fname ms lname = dhoni 

то выход

ms 
dhoni 
test abc 

Но я хочу выход быть как сильфона

ms 
dhoni 
ms 
dhoni 
+0

Есть ли причина, по которой вы не импортируете t.py в test1.py? таким образом, вы могли бы получить доступ к значениям argparse – Anbarasan

+0

Я не знаю, как импортировать t.py in в test1.py. Их любые для import.it будут очень полезны для меня, если я смогу импортировать t.py непосредственно в test1.py. – Arijit

+0

Я хочу сделать команду, подобную приведенной ниже ..'python test1.py --lname = ms -fname = dhoni', выражения будут непосредственно получены из argparse.is возможно? это решит мою проблему. Я получу эти значения с помощью argparse снова. – Arijit

ответ

0

Попробуйте для test1.py:

from sys import argv 
print "%s\n%s" % (argv[1], argv[2]) 
0

Hum Я не понимаю, почему вы пытаетесь сделать это, но вы на самом деле уже есть все, что требуется для достижения этой задачи:

Первый питон скрипт (я называю это sof.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") 
commandLineArguments = commandLineArgumentParser.parse_args() 

fname = commandLineArguments.fname 
lname = commandLineArguments.lname 

print("%s\n%s" %(fname,lname)) 
command = "python sof2.py {arg1} {arg2}".format(arg1=fname, arg2=lname) 
os.system(command) 

Второй питон scrit (sof2.py здесь)

import argparse 
import subprocess 
import os 

commandLineArgumentParser = argparse.ArgumentParser() 
commandLineArgumentParser.add_argument("fname") 
commandLineArgumentParser.add_argument("lname") 
commandLineArguments = commandLineArgumentParser.parse_args() 

fname = commandLineArguments.fname 
lname = commandLineArguments.lname 

print "%s\n%s" %(fname,lname) 

Это дает мне следующее исполнение:

python3 sof.py -fname foo -lname bar 
foo 
bar 
foo 
bar 

NB: Я использую python3, но если вы должны использовать python2 этот код остается правильные, просто удалите ( и ) вокруг print

+0

Большое спасибо за ваш ответ. Если я изменил командную строку немного, чем то, что будет выведено .change mean Если я попробовал ** python sof.py -lname bar -fname foo ** – Arijit

+0

Это не сработает. Я определил 'fname' и' lname' как позиционные аргументы во втором скрипте. Если аргумент argparse начинается с символа '-', он становится необязательным аргументом и должен быть введен как таковой. Так как аргументы '-foo' и' -bar' являются необязательными при вызове скрипта, вы должны писать 'script -bar barvalue -foo foovalue', но если вы определяете аргумент без' '' при запуске, то он становится позиционным параметр. Таким образом, с 'foo' и' bar' вызов становится: 'script foovalue barvalue'. Вы не можете вызывать 'fname' и' lname' с '-', вы должны также добавить его к параметрам argparse. –

0

вы можете изменить test1.py включать t.py и прямой доступ к этим переменные argparse.

test1.py

import t.py 
print t.fname, t.lname 
+0

Ваш ответ имеет смысл, если только этот бит 'os.system (« python test1.py ») не нужен. – hpaulj

0

Измените свой test1.py на:

import argparse 
import os 
import sys 

print sys.argv 
print "test abc" 

И обратитесь к test1.py из t.py как:

os.system("python test1.py vv gg hh") 

Теперь ваши арг vv gg hh доступны test1.py.

Смежные вопросы