如何从脚本将命令行参数传递给python文件

时间:2017-11-15 14:56:31

标签: python python-3.x

我有一个文件'train.py',它运行命令行参数。有些参数是必要的,有些是可选的

例如。

.\train.py --counter arg1 --opt optional_arg

现在,我想写一个名为'script.py'的新文件,它将导入这个'train.py'并传递该脚本中的参数并在'script.py'中执行'train.py'

我需要这样做,因为我想每次都给train.py提供不同的参数。

我知道我们可以使用shell脚本来完成这项工作。我很好奇如何使用python脚本。

train.py

import optparse
optparser = optparse.OptionParser()

optparser.add_option(
    "--counter", default = "",
    help = "Counter value"
)

optparser.add_option(
    "--opt", default = "",
    help = "Optinal parameter"
)

'''Do Something'''

script.py

args = {
    '--counter':''
    '--opts':''
}

lst = [ 1, 2, 3]

for counter in lst:
    '''set command line arguments here in args dictionary'''
    args['--counter'] = counter

    '''run train.py with args as input dictionary'''

3 个答案:

答案 0 :(得分:3)

一种方法是将train.py中的操作定义为函数:

def train(counter, opt=None):
    '''Do Something'''

从这里,在同一个文件中,您可以检查main并使用命令行args运行该函数。

if __name__ == '__main__':
    import optparse
    optparser = optparse.OptionParser()

    optparser.add_option(
        "--counter", default = "",
        help = "Counter value"
    )

    optparser.add_option(
        "--opt", default = "",
        help = "Optional parameter"
    )

    train(counter, opt)

现在您可以像导入任何其他python包一样导入调用和train函数。假设文件位于同一目录中,可能类似于:

from train import train

args = {
    '--counter':''
    '--opts':''
}

lst = [ 1, 2, 3]

for counter in lst:
    '''set command line arguments here in args dictionary'''
    kwargs['--counter'] = counter  # changed to kwargs from OP's args
                                   # for the sake of accurate nomenclature
    train(**kwargs)

请注意,只有当键值是与函数参数名称相同的字符串时,才能使用**解压缩字典。

这种方法的一个好处是,您可以独立于命令脚本运行train,也可以从没有os中介的python程序运行它。

答案 1 :(得分:2)

一种方法是通过Python使用os模块和命令行:

script.py

import os

# define some args
arg1 = '74.2'
optional_arg = 'disable'

os.system("python train.py --counter" + arg1 + "--opt" + optional_arg)

答案 2 :(得分:0)

使用https://docs.python.org/2/library/argparse.html

argparse模块可以轻松编写用户友好的命令行界面。程序定义了它需要的参数,argparse将弄清楚如何解析sys.argv中的参数。当用户给程序提供无效参数时,argparse模块还会自动生成帮助和使用消息并发出错误。