小编Wre*_* T.的帖子

正确地将stdin上的数据传递给命令并从golang中的该命令的stdout接收数据

我有以下程序:

package main

import "bytes"
import "io"
import "log"
import "os"
import "os/exec"
import "time"

func main() {
    runCatFromStdinWorks(populateStdin("aaa\n"))
    runCatFromStdinWorks(populateStdin("bbb\n"))
}

func populateStdin(str string) func(io.WriteCloser) {
    return func(stdin io.WriteCloser) {
        defer stdin.Close()
        io.Copy(stdin, bytes.NewBufferString(str))
    }
}

func runCatFromStdinWorks(populate_stdin_func func(io.WriteCloser)) {
    cmd := exec.Command("cat")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        log.Panic(err)
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Panic(err)
    }
    err = cmd.Start()
    if err != nil {
        log.Panic(err)
    }
    go populate_stdin_func(stdin)
    go func() { …
Run Code Online (Sandbox Code Playgroud)

go

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

Eclipse的scala ide扩展中scala的"构建管理器"是什么?

在Eclipse的Preferences - > Scala - > Compiler - > Build manager中,我可以选择"buildmanager"."精致"和"sbt"有什么区别?

另外,这是将sbt构建文件集成到Eclipse IDE中的一些方法吗?

eclipse scala scala-ide

7
推荐指数
1
解决办法
526
查看次数

使用boto库,我可以避免在S3中对基本存储桶授予列表权限吗?

我目前有一个IAM角色,其策略如下:

{
  "Version":"2008-10-17",
  "Statement": [
  {
    "Effect":"Allow",
    "Action":["s3:ListBucket"],
    "Resource":[
      "arn:aws:s3:::blah.example.com"
    ]
  },
  {
    "Effect":"Allow",
    "Action":["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
    "Resource":[
      "arn:aws:s3:::blah.example.com/prefix/"
    ]
  }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Boto似乎要求在桶的根目录上存在ListBucket权限才能执行get_bucket调用.如果我删除Statement数组中的第一个哈希,get_bucket('blah.example.com')将失败.这是错误文本:

*** S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxxx</RequestId><HostId>yyyy</HostId></Error>

有没有办法在仍然使用boto的情况下将存储桶的列表限制为某个前缀(例如"prefix /")?

UPDATE

为了使一切正常,我使用了以下策略:

{
  "Version":"2008-10-17",
  "Statement": [
  {
    "Effect":"Allow",
    "Action":["s3:ListBucket"],
    "Resource":[
      "arn:aws:s3:::blah.example.com"
    ],
    "Condition":{
      "StringLike":{
         "s3:prefix":"prefix/*"
      }
    }
  },
  {
    "Effect":"Allow",
    "Action":["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
    "Resource":[
      "arn:aws:s3:::blah.example.com/prefix/*"
    ]
  }
  ]
}
Run Code Online (Sandbox Code Playgroud)

您仍然必须使用该方法的validate=False参数get_bucket,但它允许在前缀中列出.

python amazon-s3 boto amazon-web-services

3
推荐指数
1
解决办法
3154
查看次数

是否有用于在Linux上创建环回设备的golang库?

我有一个文件.我们称之为"x".我想将"x"与linux中的环回设备关联起来.从bash,我输入:

losetup -f x
Run Code Online (Sandbox Code Playgroud)

这将创建类似/ dev/loop0的东西,我可以在任何地方安装.当它没有安装时,我可以用以下方法销毁环回文件:

losetup -d /dev/loop0
Run Code Online (Sandbox Code Playgroud)

我希望能够在golang中做同样的事情,而无需从go程序中调用losetup.当我查看losetup源时,是否有某个库可以实现这一点,它看起来有些棘手,尤其是创建部分.

linux system-calls go

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