我有一个文件'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'''
答案 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模块还会自动生成帮助和使用消息并发出错误。