2015-04-20 73 views
3

我綁一個腳本將通過argparse參數傳遞給另一個Python如何將argparse參數傳遞給另一個python程序?

1日腳本:t.py爲test1.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") 

代碼波紋管

import argparse 
import os 

print "test abc" 

我想通過lnamefname values to test1.py。他們以任何方式做到這一點。

中,如果我跑

python t.py -fname ms lname = dhoni 

上面的代碼

然後輸出

ms 
dhoni 
test abc 

但我想輸出到像波紋管

ms 
dhoni 
ms 
dhoni 
+0

是否有任何理由不在test1.py中導入t.py?這樣你就可以訪問argparse的值 – Anbarasan

+0

我不知道如何在test1.py中導入t.py,如果我可以導入t,那麼它們對import.it會非常有幫助。py直接在test1.py中。 – Arijit

+0

我想做一個像bellow一樣的命令..'python test1.py --lname = ms -fname = dhoni' argments將直接來自argparse.is是可以做到的嗎?這將解決我的問題。我將再次使用argparse接收這些值。 – Arijit

回答

0

嘗試此test1.py

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

哼,我不明白爲什麼你想這樣做,但你真的已經有了所有需要實現這個任務:

第一個Python腳本(我把它叫做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) 

的第二個Python 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 

注:我使用python3,但如果你有python2這個代碼中使用仍然是正確的,只是刪除()圍繞print

+0

非常感謝您的回覆。如果我改變了命令行,比將輸出更改一點點.change意思如果我試過** python sof.py -lname欄-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" 

而且從t.py如打電話給你test1.py

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

現在你ARGS vv gg hh是可用test1.py

相關問題