【问题标题】:Redirect Print statment output to file if any command line argument is provided如果提供了任何命令行参数,则将打印语句输出重定向到文件
【发布时间】:2018-02-24 08:21:51
【问题描述】:

我已经编写了函数,它只有使用 Openstack API 从 Openstack 获取详细信息的功能。我已经在进行日志记录,但是为了快速验证少数网络,我将几个打印语句的输出重定向到一个文件。 (看起来像这样),这很好用。

def get_net_details():
    ...
    filename = open('validation.txt', 'a')
    network_name = network['name']
    print >> filename, 'Network Name : {0}'.format(network_name)
    network_id = subnet_detail['subnet']['network_id']
    print >> filename, 'Network ID : {0}'.format(network_id)
    network_type = network['provider:network_type']
    print >> filename, 'Network Type : {0}'.format(network_type)
    print >> "========================================="
    filename.close()

问题是,仅当用户在脚本执行时提供任何命令行输入(通过 argparse 或任何其他方式进行任何切换)时,我才想将 print 语句的输出记录到文件中。

任何帮助将不胜感激..!

【问题讨论】:

  • 检查 sys.argv 的长度,如果提供了输入,则进行重定向。
  • 你也可以试试getopt模块,它有标准的命令行参数处理方式

标签: python python-2.7 argparse argv


【解决方案1】:

首先重写你的函数,让它接受一个流作为输入:

def get_net_details(outstream):
    ...
    network_name = network['name']
    print >> outstream, 'Network Name : {0}'.format(network_name)
    network_id = subnet_detail['subnet']['network_id']
    print >> outstream, 'Network ID : {0}'.format(network_id)
    network_type = network['provider:network_type']
    print >> outstream, 'Network Type : {0}'.format(network_type)
    print >> outream, "========================================="

然后让调用者将打开的文件或sys.stdout(取决于命令行标志)作为参数传递。

def main(...):
    # argparse stuff here

    if someflag:
        outstream = open(path/to/file, "w")
    else:
        outstream = sys.stdout
    try:
        get_net_details(outstream)
    finally:
        if someflag:
            outstream.close()

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 2018-07-03
    • 2011-11-01
    • 2019-02-24
    • 2014-05-15
    • 2011-05-05
    • 2015-06-06
    • 2014-09-05
    相关资源
    最近更新 更多