2014-06-16 22 views
1

指定蟒蛇參數如果調用蟒蛇帶參數,即如何除零參數

python script.ps arg1, arg2, arg2 

sys.argv中[0]是script.ps,腳本

我如何引用的名稱並保存除第0個參數以外的python腳本的所有參數的值。

這裏是我的腳本

import sys, subprocess, socket, string 
import wmi, win32api, win32con 

for args in [item.strip('sender-ip=') for item in sys.argv[1:]]: 

    userIP = args 
    userloggedon = "" 

    # perform system lookup of IP address 
    userIP = "\\\\" + userIP 

    pst = subprocess.Popen(
      ["D:\pstools\psloggedon.exe", "-l", "-x", userIP], 
      stdout = subprocess.PIPE, 
      stderr = subprocess.PIPE 
     ) 

    out, error = pst.communicate() 

    userLoggedOn = out.split('\n')[1].strip() 
    print 'userId={}'.format(userLoggedOn) 

這個腳本完美的作品,如果我發送器IP是唯一的參數,即

python script.ps sender-ip=10.10.10.10 

,但如果我調用它

python script.ps [email protected], sender-ip=10.10.10.10 

python script.ps [email protected] sender-ip=10.10.10.10 

python script.ps "[email protected], sender-ip=10.10.10.10" 

你的想法......

這是行不通的,因爲它不能提取發送器IP的IP地址。

我期望的輸出是

userId=DOMAIN\username 

,而不是我得到

userId= 

userId= 
userId=DOMAIN\username 
+7

你或許應該看看['argparse'(https://docs.python.org/dev/library/argparse.html)。 – jonrsharpe

+0

你調用腳本的方式爲什麼不使用kwargs呢? –

+0

如果我的答案解決了您的問題,請接受它,以便可以關閉問題。 –

回答

1

​​可以幫助你在這種情況下,它是有一個非常有用的工具在你的腰帶下。

下面是一個​​例如有多個ARGS:

parser = argparse.ArgumentParser(description='Description of your program') 
parser.add_argument('-f','--foo', help='Description for foo argument', required=True) 
parser.add_argument('-b','--bar', help='Description for bar argument', required=True) 
args = vars(parser.parse_args()) 

args將包含參數的字典:

if args['foo'] == 'Hello': 
    pass # replace with code 

if args['bar'] == 'World': 
    pass # replace with code 

也檢查這裏瞭解更多信息:

編輯:對於位置參數(例如, pos_arg =值)使用方法:

parser.add_argument('pos_arg', nargs='+', help='Description for positional argument') 
+0

你爲什麼要對'parse_args()'的結果調用'vars()'?只是做'args。foo =='你好',它也更具可讀性。 – Bakuriu

+0

如果我想參數化參數,會發生什麼情況?我將不得不使用'getattr(args,argvar)argvar = foo'。在添加初始可讀性和刪除最終可讀性之間進行權衡 –

+0

除了幾乎從不參數化屬性。所以你正在減少一個非常常見的操作的可讀性,以略微提高一個非常罕見的可讀性。 – Bakuriu