小编Jak*_*ger的帖子

为什么shell = True吃我的subprocess.Popen stdout?

似乎在链的第一个进程中使用shell = True会以某种方式从下游任务中删除stdout:

p1 = Popen(['echo','hello'], stdout=PIPE)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs correctly ('hello\n', None)
Run Code Online (Sandbox Code Playgroud)

使第一个进程使用shell = True以某种方式杀死输出...

p1 = Popen(['echo','hello'], stdout=PIPE, shell=True)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs incorrectly ('\n', None)
Run Code Online (Sandbox Code Playgroud)

shell = True对第二个进程似乎并不重要.这是预期的行为吗?

python subprocess pipe popen

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

为什么**kwargs不用python ConfigObj进行插值?

我在python中使用ConfigObj进行模板式插值.通过**展开我的配置字典似乎不进行插值.这是一个功能还是一个bug?有什么好的解决方法吗?

$ cat my.conf
foo = /test
bar = $foo/directory

>>> import configobj
>>> config = configobj.ConfigObj('my.conf', interpolation='Template')
>>> config['bar']
'/test/directory'
>>> '{bar}'.format(**config)
'$foo/directory'
Run Code Online (Sandbox Code Playgroud)

我希望第二行是/test/directory.为什么插值不能用**kwargs?

python kwargs configobj

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

在哪里保存用于 Google Cloud Composer 连接设置的服务帐户密钥文件?

我正在尝试使用服务帐户密钥在 Google Cloud Composer 中设置 Google Cloud Platform 连接。所以我创建了一个 GCS 存储桶并将服务帐户密钥文件放在存储桶中。密钥存储在 JSON 中。在密钥文件路径字段中,我指定了一个 GCS 存储桶,在密钥文件 JSON 字段中,我指定了文件名。范围是https://www.googleapis.com/auth/cloud-platform

尝试使用此连接启动 Dataproc 集群时,出现找不到 JSON 文件的错误。

查看错误消息,代码尝试使用以下方法解析文件: with open(filename, 'r') as file_obj这显然不适用于 GCS 存储桶路径。

所以我的问题是,如果不能将这个服务帐户密钥文件放在 GCS 路径中,我应该把它放在哪里?

google-cloud-platform airflow google-cloud-composer

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

如何从气流打包的 DAG 中读取配置文件?

Airflow封装的 DAG似乎是实现合理的生产气流部署的重要组成部分。

我有一个带有动态 subDAG 的 DAG,由配置文件驱动,例如:

配置文件:

imports:
  - project_foo
  - project_bar`
Run Code Online (Sandbox Code Playgroud)

这会产生 subdag 任务,例如imports.project_{foo|bar}.step{1|2|3}.

我通常使用 python 的open函数读取配置文件,一个 laconfig = open(os.path.join(os.path.split(__file__)[0], 'config.yaml')

不幸的是,当使用打包的 DAG 时,这会导致错误:

Broken DAG: [/home/airflow/dags/workflows.zip] [Errno 20] Not a directory: '/home/airflow/dags/workflows.zip/config.yaml'
Run Code Online (Sandbox Code Playgroud)

有什么想法/最佳实践可以在这里推荐吗?

airflow google-cloud-composer

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

Python'sys.argv'是否限制了最大参数数量?

我有一个需要处理大量文件的Python脚本.为了解决上可以传递给命令的参数个数Linux的规模相对较小的限制,我使用find -print0xargs -0.

我知道另一种选择是使用Python的glob模块,但是当我有一个更高级的find命令,寻找修改时间等时,这将无济于事.

在大量文件上运行我的脚本时,Python只接受参数的一个子集,这是我首先想到的限制argparse,但似乎是在sys.argv.我找不到任何关于此的文件.这是一个错误吗?

这是一个Python脚本示例,说明了这一点:

import argparse
import sys
import os

parser = argparse.ArgumentParser()
parser.add_argument('input_files', nargs='+')
args = parser.parse_args(sys.argv[1:])

print 'pid:', os.getpid(), 'argv files', len(sys.argv[1:]), 'argparse files:', len(args.input_files)
Run Code Online (Sandbox Code Playgroud)

我有很多文件可以运行:

$ find ~/ -name "*" -print0 | xargs -0 ls > filelist
748709 filelist
Run Code Online (Sandbox Code Playgroud)

但看起来xargs或Python正在分解我的大文件列表并使用几个不同的Python运行处理它:

$ find ~/ -name "*" -print0 | xargs -0 python test.py
pid: 4216 argv files 1819 number of files: 1819
pid: 4217 argv …
Run Code Online (Sandbox Code Playgroud)

python xargs argv argparse

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

Cloud Identity Platform:IdP 发起的 SAML 流是否可行?

Google Cloud Identity Platform 提供了有关服务提供商发起的 SAML 身份验证流程的文档。在搜索文档和在线后,我找不到有关身份提供商发起的流程的任何信息。

Identity Platform 是否完全支持 IdP 发起的 SAML 流?假设我使用 firebase JS SDK,接收 IdP SamlResponse POST 会是什么样子?

谢谢!

firebase google-cloud-platform firebase-authentication

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