如何在python中创建命令行参数

时间:2015-03-26 11:53:32

标签: python linux

如何在Python中创建参数?假设我有一个脚本install.py,它在主机上执行包。我有另一个名为config.py的配置脚本,其中我存储了主机名&包名称。但我想创建我的主机名作为"参数"我可以使用此命令在终端中运行 安装。它应该将主机名称作为参数捕获。 [即安装linuxServer1'它应该直接安装到该主机。]

#codes from config.py
hostName = "linuxServer1"

package=['test1',
         'test2'
        ]


#codes from install.py

Install = []

for i in config.package:
 Install.append("deploy:"+i+",host=")

for f in Install:
 subprocess.call(["fabric", f+config.hostName])

3 个答案:

答案 0 :(得分:1)

我认为你应该看看python的“ argparse ”模块,它将解决你当前的问题:)

让我们举一个例子 -

以下代码是一个Python程序,它获取整数列表并生成总和或最大值:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

如果要求帮助(假设上面的Python代码保存在名为prog.py的文件中) -

$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
 N           an integer for the accumulator

optional arguments:
 -h, --help  show this help message and exit
 --sum       sum the integers (default: find the max)

使用适当的参数运行时,它会输出命令行整数的总和或最大值:

$ python prog.py 1 2 3 4
4

$ python prog.py 1 2 3 4 --sum
10

如果传入无效参数,则会发出错误:

$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'

答案 1 :(得分:1)

sys.argv包含给python命令的所有命令行参数。

import sys

if __name__ == "__main__":
    print(sys.argv) # the list containing all of the command line arguments
    if len(sys.argv) > 1: # The first item is the filename
        host = sys.argv[1]
        print(host)

答案 2 :(得分:0)

import argparse
Install = []
hostName = str(sys.argv[1])

for i in config.package:
 Install.append("deploy:"+i+",host=")

for f in Install:
 subprocess.call(["fabric", f+hostName])