小编Mac*_*ers的帖子

了解OptionParser

我正在尝试optparse,这是我的初始脚本.

#!/usr/bin/env python

import os, sys
from optparse import OptionParser

parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-d", "--dir", type="string",
                  help="List of directory",
                  dest="inDir", default=".")

parser.add_option("-m", "--month", type="int",
                  help="Numeric value of the month", 
                  dest="mon")

options, arguments = parser.parse_args()

if options.inDir:
    print os.listdir(options.inDir)

if options.mon:
    print options.mon

def no_opt()
    print "No option has been given!!"
Run Code Online (Sandbox Code Playgroud)

现在,这就是我要做的事情:

  1. 如果没有给出该选项的参数,它将采用"默认"值.即myScript.py -d只列出当前目录或-m没有任何参数将当前月份作为参数.
  2. 对于"--month",只允许01到12作为参数
  3. 想要结合多个选项来执行不同的任务,即myScript.py -d this_dir -m 02与-d和-m作为个体做不同的事情.
  4. 只有在脚本没有提供选项的情况下,它才会打印" 没有选项! ".

这些可行吗?我确实访问了doc.python.org网站以获得可能的答案,但作为一个蟒蛇初学者,我发现自己迷失在页面中.非常感谢你的帮助; 提前致谢.干杯!!


更新:16/01/11 …

python optparse optionparser

10
推荐指数
1
解决办法
6万
查看次数

从"YYYYMMDD"格式化字符串计算第二天

如何以相同的YYYYMMDD格式从20110531这样的字符串中计算第二天?在这种特殊情况下,我希望得到20110601.以静态方式计算"明天"或第二天并不是那么难,像这样:

>>> from datetime import date, timedelta
>>> (date.today() + timedelta(1)).strftime('%Y%m%d')
'20110512'
>>>
>>> (date(2011,05,31) + timedelta(1)).strftime('%Y%m%d')
'20110601'
Run Code Online (Sandbox Code Playgroud)

但是我如何使用字符串dt = "20110531"来获得与上面相同的结果?

python python-2.4

9
推荐指数
1
解决办法
1万
查看次数

用sed替换等长的文本

有没有办法用sed替换等长的其他东西(例如点,零等)的模式?像这样:

maci:/ san$ echo "She sells sea shells by the sea shore" | sed 's/\(sh[a-z]*\)/../gI'
.. sells sea .. by the sea ..
Run Code Online (Sandbox Code Playgroud)

("我"需要更新版本的sed来忽略大小写)
这很简单:以"sh"开头的单词被双点(..)替换但是如何使它成为这样的东西:... sells sea ...... by the sea .....

任何的想法?干杯!

regex linux bash sed

6
推荐指数
4
解决办法
3811
查看次数

Terraform:如何从VPC id获取VPC CIDR?

我正在尝试为给定的 VPC 获取PIV4_CIDR,使用 aws_vpcs 数据源首先识别 VPC 并从 ID 获取 CIDR - 这可能吗?

简单介绍一下背景,出于某些设计原因,我们在不同的 VPC 中提供服务。比如说。我有三个 VPC:xxxprod-nxxxprod-l并且xxxprod-h我想为整个子网添加 SG 规则以允许访问特定端口。这是我尝试过的:

data "aws_vpcs" "prod" {
  tags = {
    Name = "${var.project}prd-*"
  }
}

resource "aws_security_group_rule" "pa-allow" {
  count             = length(data.aws_vpcs.prod.ids)
  type              = "ingress"
  from_port         = 8140
  to_port           = 8140
  protocol          = "tcp"
  cidr_blocks       = [sort(data.aws_vpcs.prod.ids)[count.index].cidr_block]
  security_group_id = aws_security_group.secg.id
  description       = "allow from ${sort(data.aws_vpcs.prod.ids)[count.index]}"
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

错误:不支持的属性

在 ../../modules/mgt/ec2.tf 第 42 行,资源“aws_security_group_rule”“pa-allow”中:42:cidr_blocks = [sort(data.aws_vpcs.prod.ids)[count.index].cidr_block ]

该值没有任何属性。 …

amazon-ec2 amazon-web-services terraform

6
推荐指数
2
解决办法
9776
查看次数

如何在Linux/OS X上打印wstring?

如何€áa¢cée£在控制台/屏幕上打印如下字符串?我试过这个:

#include <iostream>    
#include <string>
using namespace std;

wstring wStr = L"€áa¢cée£";

int main (void)
{
    wcout << wStr << " : " << wStr.length() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的.即使令人困惑,如果我从字符串中删除,打印输出就像这样:?a?c?e? : 7但是在字符串中,字符后没有任何内容被打印出来.

如果我在python中编写相同的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

wStr = u"€áa¢cée£"
print u"%s" % wStr
Run Code Online (Sandbox Code Playgroud)

它在同一台控制台上正确打印出字符串.我在c ++中缺少什么(好吧,我只是一个菜鸟)?干杯!!


更新1:基于nm的建议

#include <iostream>
#include <string>
using namespace std;

string wStr = "€áa¢cée£";
char *pStr = 0;

int main (void) …
Run Code Online (Sandbox Code Playgroud)

c++ unicode wstring

5
推荐指数
1
解决办法
5194
查看次数

在屏幕上打印消息并同时发送到syslog

我正在尝试-s在我的脚本中实现(即静默)选项 - 当给出错误/信息等时,将发送到syslog,否则在屏幕上打印并同时发送到syslog.这就是我正在做的事情:

echo -e "This Is a Test Message\nWell, not really!!"  2>&1 | logger
Run Code Online (Sandbox Code Playgroud)

echo消息发送到syslog(不在屏幕上打印),但不能只是弄清楚如何同时做两者.我看到人们只谈论在屏幕上打印时记录syslog或发送日志到不同的文件,而不是我正在尝试处理的情况.任何帮助或指针将不胜感激.干杯!!

linux bash logging syslog echo

5
推荐指数
1
解决办法
7449
查看次数

aws_lb_target_group_attachment:将多个实例附加到每个 target_group

我每个 NLB 有多个 target_groups,我需要将多个实例附加到每个 target_group。将target_id在作为一个字符串aws_lb_target_group_attachment资源,我看不出有什么简单的方法来实现这一目标。这就是我正在做的 atm:

变量文件

variable "nlb_listeners" {
  default = [
    {
      protocol     = "TCP"
      target_port  = "80"
      health_port  = "1936"
    },
    {
      protocol     = "TCP"
      target_port  = "443"
      health_port  = "1936"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

实例.tf

// Get the instance ids of the NLB members  
data "aws_instances" "nlb_insts" {
  instance_tags = {
   Name = "${var.vpc_names[var.idx]}${var.inst_role}0*"
  }
  instance_state_names = ["running", "stopped"]
}

// EC2 instances
resource "aws_instance" "insts" {
  count         = var.inst_count
  instance_type = var.inst_type …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

5
推荐指数
1
解决办法
1910
查看次数

Terraform:假设角色问题

几天来我一直在试图解开这个谜团,但没有任何乐趣。基本上,Terraform 无法发挥作用并失败:

\n\n
Initializing the backend...\n2019/10/28 09:13:09 [DEBUG] New state was assigned lineage "136dca1a-b46b-1e64-0ef2-efd6799b4ebc"\n2019/10/28 09:13:09 [INFO] Setting AWS metadata API timeout to 100ms\n2019/10/28 09:13:09 [INFO] Ignoring AWS metadata API endpoint at default location as it doesn\'t return any instance-id\n2019/10/28 09:13:09 [INFO] AWS Auth provider used: "SharedCredentialsProvider"\n2019/10/28 09:13:09 [INFO] Attempting to AssumeRole arn:aws:iam::72xxxxxxxxxx:role/terraform-admin-np (SessionName: "terra_cnp", ExternalId: "", Policy: "")\n\nError: The role "arn:aws:iam::72xxxxxxxxxx:role/terraform-admin-np" cannot be assumed.\n\n  There are a number of possible causes of this - the most common are:\n …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services terraform assume-role

5
推荐指数
1
解决办法
7017
查看次数

如何阻止getopts将空白或null或其他选项用作选项值

我(大概每个人)都不时遇到这个问题,但我自己找不到任何好的解决方法。当getopts寻找一个参数时,即使它是一个选项,它实际上也会接受下一个参数。这是我为阻止该错误所做的事情(代码段):

#!/bin/bash 

function optsGet()
{
    while getopts ":c:f" opt; do
        case $opt in
            c ) [[ -z "${OPTARG}" || "${OPTARG}" == -* ]] \
                && { echo -e "ERROR: Invalid argument\n"; exit 1; }
                CNAME="${OPTARG}.tEsTsTr"
                ;;
            f ) FORCE=true
                ;;
            \?) echo -e "Invalid option: -$OPTARG\n" >&2;;
            : ) echo -e "Missing argument for -$OPTARG\n" >&2; exit 1;;
            * ) echo -e "Unimplemented option: -$OPTARG\n" >&2; exit 1;;
        esac
    done

    shift $(($OPTIND - 1))
}

optsGet "${@}"
echo …
Run Code Online (Sandbox Code Playgroud)

linux bash shell getopt getopts

4
推荐指数
1
解决办法
3227
查看次数

阻止 PostgreSQL 在多行中拆分值?

我正在使用将二进制数据 (bytea) 数据类型转换为字符串,encode(foo::bytea, 'base64')但输出被分成多行:

-[ RECORD 1 ]-+-----------------------------------------------------------------------
 req_id       | 132675
 b_string     | d4IF4jCCBd4GCSqGSIb3DQEHAqCCBc8wggXLAgEDMQ0wCwYJBAIBMIGYBgZngQgBAQGg+
              | gY0EgYowgYcCAQAwCwYJYIZIAQAwCwYJYIZIAWUDBAIHUwUdH0JybzpY2evf+v9Xg86b+
              | HSGTGYBIb/QwJQIBAgQg1M6/cJ+S39XY1lm43oenxJNLrYcc3hVw7fgwJQIBDgQgIAil+
              | 1JnYbdS0p4pK07kMkb/dbMcxryx6mqbLTzx+YJ6gggQbMI2gAwIBAgIESS7vwTAKBggq+
              | LUxRjUXbTgfGwUKOFwemsc4KXbsLZ13MkbNfAQ==
Run Code Online (Sandbox Code Playgroud)

如何获得单个字符串?

更新:基于@LaurenzAlbe 的解决方案

只是为了完整性,这就是我最终做的事情,给了我想要的结果:

translate(encode(foo::bytea, 'base64'), E'\n', '')
Run Code Online (Sandbox Code Playgroud)

postgresql base64 encode psql

4
推荐指数
1
解决办法
822
查看次数