Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中通过文件传递命令行参数的最佳方法_Python_Command Line Arguments - Fatal编程技术网

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

在python中通过文件传递命令行参数的最佳方法,python,command-line-arguments,Python,Command Line Arguments,我有很多参数要传递给我的main.py。将它们存储在txt文件中更容易。所以,我想知道使用“配置”文件传递CL参数的最佳方法。 不幸的是,Shell脚本不是我所需要的。使用它使用.ini文件,而且非常容易使用 配置文件: [DEFAULT] KeepAlive = 45 ForwardX11 = yes 示例代码: >>> config = configparser.ConfigParser() >>> config.sections() [] >&g

我有很多参数要传递给我的
main.py
。将它们存储在txt文件中更容易。所以,我想知道使用“配置”文件传递CL参数的最佳方法。 不幸的是,Shell脚本不是我所需要的。

使用它使用.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'

下面是一个简单的函数,它将任何
@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或更高版本
  • 参数文件中可能有
    @
    参数。扩展是递归的
如果您计划使用,则其设计正是为了解决此问题

在启动程序中,将所有参数(每行一个)放入一个文件中。将
@file.txt
传递给您的子程序。在子程序中,将
fromfile\u prefix\u 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.
--巴=2
问题一
问题二
命令行和输出:

$python zz.py@foo.txt
命名空间(bar='2',foo='1',q=['qone','qtwo'])

。。。除了shell脚本之外?您当前的
main.py
如何解析其参数?@Robᵩ 我还不知道。我能够按照我的需要实施它。相关:甚至更相关:那很好。但是我希望有更简单和漂亮的东西,无论如何你应该在这里添加一个直接的答案,因为链接的内容可以更改。事实上,我一直在期待在文件中放置多个参数时出现困难。你能给我举一个用2个参数解析文件和参数的例子吗?我已经添加了一个例子。希望有帮助!