2016-01-05 110 views
0

我有一個正在運行的腳本(使用我編寫的模塊包),某些腳本在某些部分使用命令行參數執行另一個腳本。我想要另一個腳本(這是暴露給其他人,因爲其他人不是,但這個是可修改的&用戶可查看)自動傳輸sys.argv[1]到某個功能,如foo(),它有一些論點,用戶發送時調用它 - 但我不希望用戶知道額外的參數,並需要自己發送(換句話說,我想sys.argv[1]自動發送到foo())。將命令行參數作爲默認函數參數

這可能嗎?

例子:

#my_script.py# 
import subprocess 
def do_stuff(): 
    #stuff 
    return calculated_var 
my_var = do_stuff() 
subprocess.check_call(["C:/path/to/user/script/user_script.py", str(my_var)]) 

#user_script.py# 
import my_module 
print "My script was finally called, I don't know about any arguments" 
my_module.my_func(my_var1, my_var2) #In the background, both my_var1 and my_var 2 are called as function arguments BUT also sys.argv[1] without the user knowing 

#my_module.py# 
def my_func(arg1, arg2, arg3="""WHAT DO I PUT HERE? I can't put sys.argv[1]"""): 
    pass 
+0

很難跟蹤你的問題。請用如下例子重寫它:我有script.py並用命令行參數調用它,並且我有包含函數'foo(...)'的script2.py,我需要這樣做和那個。 – vrs

+0

@vrs完成。它足夠嗎? – Jim

+1

爲什麼不能使用'sys.argv [1]'?它會工作。 – Dunes

回答

2

你所描述的應該工作。在這裏,它被降下來,希望它有幫助。

my_script.py

import subprocess 
subprocess.check_call(["python", "user_script.py", "c"]) 

user_script.py

import my_module 
my_module.my_func('a', 'b') 

my_module.py

import sys 
def my_func(arg1, arg2, arg3=sys.argv[1]): 
    print arg1, arg2, arg3 

然後,python my_script.py將輸出a b c

+0

我沒有意識到自己,這是一個可愛的python功能。謝謝 – Jim