在python中通过文件传递命令行参数的最佳方法

时间:2018-02-06 19:34:15

标签: python command-line-arguments

我有很多论据要传递给我的main.py。将它们存储在txt文件中更容易。所以,我想知道使用" config"的最佳方式。要传递CL args的文件。 不幸的是,Shell脚本不是我需要的。

3 个答案:

答案 0 :(得分:2)

使用configparser.它使用.ini文件,它非常易于使用。

配置文件:

[DEFAULT]
KeepAlive = 45
ForwardX11 = yes

示例代码:

>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read('example.ini')
>>> for key in config['bitbucket.org']: print(key)
...
keepalive
forwardx11
>>> default = config['default']
>>> default['keepalive']
'45'
>>> default['ForwardX11']
'yes'

答案 1 :(得分:1)

这是一个简单的函数,它将任何@foo参数转换为foo的内容,每行一个参数。转换后,您可以通过任何常规方式使用sys.argv

import sys

def expand_arg_files(args):
    for arg in args:
       if arg.startswith('@'):
           with open(arg[1:]) as f:
               file_args = f.read().splitlines()
           yield from expand_arg_files(file_args)
       else:
           yield arg


sys.argv[:] = expand_arg_files(sys.argv[:])
print(sys.argv)

注意:

  • 生成器委派语法需要Python3.3或更高版本。
  • 您可以在参数文件中包含@个参数。扩展是递归的。

答案 2 :(得分:1)

如果您打算使用argparse,则fromfile_prefix_chars旨在解决此问题。

在启动程序中,将所有参数(每行一个)放入一个文件中。将@file.txt传递给您的子计划。在您的子计划中,将fromfile_prefix_chars参数传递给ArgumentParser()构造函数:

parser = argparse.ArgumentParser(fromfile_prefix_chars='@')

argparse为你处理剩下的事情。

以下是一个例子:

from argparse import ArgumentParser

parser = ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('-f', '--foo')
parser.add_argument('--bar')
parser.add_argument('q', nargs='*')

ns = parser.parse_args()
print(ns)

foo.txt的内容:

-f
1
--bar=2
q one
q two

命令行和输出:

$ python zz.py @foo.txt
Namespace(bar='2', foo='1', q=['q one', 'q two'])