我正在尝试向服务器添加一个新的存储库,以便我可以通过Ansible安装Java.不幸的是,每当我尝试运行playbook时,由于GPG错误而失败.有人可以解释这里出了什么问题以及我需要做些什么才能解决这个问题?
我正在使用Ansible 1.7.2,目前只连接到localhost.
我有一个非常简单的Playbook,看起来像这样:
- hosts: home
tasks:
- name: Add repositories
apt_repository: repo='ppa:webupd8team/java' state=present
Run Code Online (Sandbox Code Playgroud)
当我尝试执行它时,我收到以下错误:
sal@bobnit:~/Workspace$ ansible-playbook --ask-sudo-pass basic.yml
sudo password:
PLAY [home] *******************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [Add repositories] ******************************************************
failed: [localhost] => {"cmd": "apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 7B2C3B0889BF5709A105D03AC2518248EEA14886", "failed": true, "rc": 2}
stderr: gpg: requesting key EEA14886 from hkp server keyserver.ubuntu.com
gpg: no writable keyring found: eof
gpg: error reading `[stream]': general error
gpg: Total number processed: 0
stdout: Executing: gpg --ignore-time-conflict --no-options --no-default-keyring …Run Code Online (Sandbox Code Playgroud) 我有一个HList,其中每列代表一个表的列.HList中的每个列表具有相同的长度.
我希望能够编写一个函数,将该表的各行选取为元组或值的HList.最终我会把它转换成更合理的东西(例如Case Case).
import shapeless.PolyDefns.~>
import shapeless.{HList, HNil}
val a = List(1,2,3) :: List("a", "b", "c") :: List(true, false, true) :: HNil
object broken extends (HList ~> HList) {
def apply[T](n:Int, l:HList): HList = {
// I want to pick out the nth element of each HList
// so in the above example, if n==1
// I want to return
// 2 :: "b" :: false :: HNil
???
}
}
broken(1,a)
Run Code Online (Sandbox Code Playgroud)
我可以修复此功能,以便它根据我在评论中描述的内容工作吗?
加分点:我可以将其写为迭代器,将上面的HList"a"转换为(Int,String,Boolean)或等效HList的序列吗?
假设我有一个带有签名的函数:
def foo(self, name:str, stream):
pass
Run Code Online (Sandbox Code Playgroud)
我想在"stream"参数中添加一个注释,这意味着"只要x.readline() - > str就可以拥有任何对象x.
所以这意味着我可以在这里使用任何python文件对象作为参数(因为它有一个readline方法),但我也可以提供一个只实现readline的对象,它是完全可以接受的.
我怎么能重写这个函数定义,以便我可以注释第二个参数?
我有一个看起来有点像这样的函数。我希望该函数接受 io.IOBase 的任何子类 - 换句话说,任何类似文件的对象。
def import_csv_file(f:io.IOBase)->pandas.DataFrame:
return pandas.read_csv(f)
Run Code Online (Sandbox Code Playgroud)
当我在 IntelliJ 中查看对象时,类型提示的 JetBrains 实现会拒绝任何输入,除非我提供了一个 io.IOBase 的实例——但是如果我想传入一个 io.IOBase 的子类的实例怎么办?有没有办法更改类型提示以说这是允许的?
为了引导 Gradle-Wrapper,我需要从需要 HTTP Basic-Auth 的 Artifactory 中提取 Gradle 发行版。我的构建环境无法访问外部世界 - 这被公司代理阻止。我的问题是如何提供凭据以便 Gradle 可以引导。
Gradle 文档建议将用户名和密码放入 gradle-werapper.properties。
如果我将 gradle-wrapper.properties 放入我的项目中,那么任何有权访问我的源代码的人都可以访问我的凭据。或者,如果我将 gradle-wrapper.properties 文件放入我的构建映像中,那么我的所有构建都将绑定到相同的凭据。这两个都不能接受。
我更愿意做的是让 Gradle Wrapper 从环境变量中获取它的凭据。我的运行时环境使得以正确的方式提供凭据变得非常容易 - 但是有没有办法让 Gradle 使用来自环境变量的凭据?
自 Python 3.8 以来,我已经能够执行以下操作:
from typing import TypeVar, Generic
T = TypeVar('T')
class Stack(Generic[T]):
def __init__(self) -> None:
# Create an empty list with items of type T
self.items: List[T] = []
Run Code Online (Sandbox Code Playgroud)
我可以是 Stack[int] 或 Stack[str],T 可以是任何东西,对吗?
但是,如果我想将 T 的可能值限制为 Foo 的子类,或者 Foo 的子类,并实现 BarProtocol,该怎么办?
Scala 有这些漂亮的协方差运算符:
T <: Foo, T <: BarProtocol
Run Code Online (Sandbox Code Playgroud)
但是 Python 中有等价的吗?
几年前,我为当地社区广播电台编写了一个python命令行实用程序.这项工作的目的是使用从Google日历获取的元数据来增强广播流.这意味着任何在流上收听广播电台的人都能够阅读有关当前播放内容的最新信息流以及下一个节目开始前的分钟数.
大多数情况下,这个脚本运行良好,多年来提供良好的服务.
最近我遇到了一个新的要求:该应用程序的用户希望偶尔停止,启动或重新加载该过程(例如,因为日程安排信息已经改变).而不是教工作室工作人员的每个成员如何使用命令行,我们想到给这个工具一个简单的GUI.
由于应用程序将仅在Ubuntu上开发和运行,因此我们选择Quickly作为一个简单的开发框架.它有很好的文档记录,并为开发人员了解平台提供了低负担.
我们希望应用程序的初始设计包含一个类似浏览器的工具按钮功能区(启动,停止,重新加载).包含滚动状态消息的大面板.下面会有一个小的状态栏,可以深入了解程序的当前内部状态.
作为GUI编程的全新,我仍然不确定如何构建UI:主要的谜团仍然存在:
什么样的控件应该用于滚动文本面板,其中将显示日志消息.这需要是只读的,但每次生成日志消息时都会更新.我曾计划制作一个自定义Python日志记录处理程序,将任何日志消息重定向到此面板 - 但最简单的方法是什么?
我现在使用的脚本阻止了它没有对time.sleep()做任何事情 - 这显然对GUI没有好处,那么GUI应用程序中的进程的正确行为是什么,暂时无关?
我的进程最初设计为在终端中作为单个线程运行.鉴于我需要像以前那样运行更多或更少,这意味着我应该考虑将GUI内容放在与工作进程不同的线程上.在Quickly框架中是否有任何文档模式可以解决这个问题?
继续 - 是否有一种很好的方法可以使用Ubuntu以外的平台快速运行开发应用程序?例如,我可以轻松地使我的应用程序适用于任何其他基于Linux的操作系统.那些与OSX或Windows无关的东西呢?
谢谢!
我想使Foo成为一个不变的对象。当我“扩展” foo时,我想获得一个Foo的新实例。我希望输入如下提示:
class Foo(object):
def extend(self, item:str) -> Foo:
pass
Run Code Online (Sandbox Code Playgroud)
看起来不错,但是IntelliJ并不同意。我在第二行的Foo下面得到一个红色的下划线。错误消息是:未解析的引用'Foo'。
我有点明白了这是什么意思:在tyme上,我们正在解析第2行,但是我们还没有对象Foo,因此解释器不知道Foo是什么意思。
但奇怪的是,对于PyCharm(但无效的python),这个非常不令人满意的替代方法就足够了:
class Foo(object):
def extend(self, item:str) -> Foo_:
pass
Foo_ = Foo
Run Code Online (Sandbox Code Playgroud)
那么有没有有效的方法来做到这一点?我如何在类型提示注释中说特定方法返回新的self实例。类?
我在带有PyCharm插件的IntelliJ的最新版本上使用Python 3.5。
我在非生产 RHEL6 服务器上运行 Elasticsearch。我只有一个没有 root 访问权限的普通用户帐户。我在一个非常封闭的公司环境中,因此获得 root 权限将非常耗时,我需要一个解决方法。
当我开始这个过程时,我收到这些错误:
max file descriptors [8192] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [salimfadhley] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Run Code Online (Sandbox Code Playgroud)
有没有办法让 ElasticSearch 忽略这个错误条件而直接启动。
我完全意识到忽略错误通常被认为是不明智的,但是在这种情况下,我只需要启动并运行 ES,这样我就可以将注意力集中在该项目的其他方面:提高系统限制将花费更多的时间我目前有可用的。
我在一个安全的环境中工作,不允许开发人员从 GitHub 或任何其他外部存储库进行 git-clone。
我能够从 GitHub 下载 g8 模板 (play-scala-seed) 作为 zip 文件,并将其解压缩到本地文件夹。我可以使用该本地目录而不是 git repo 吗?
我第一次尝试失败:
> dir .\play-scala-seed
Volume in drive C is OSDisk
Volume Serial Number is A074-A016
Directory of C:\workspace\play-scala-seed
03/22/2018 11:03 AM <DIR> .
03/22/2018 11:03 AM <DIR> ..
03/22/2018 11:01 AM <DIR> project
03/22/2018 10:57 AM <DIR> src
03/22/2018 11:03 AM <DIR> target
03/22/2018 10:57 AM 70 .gitignore
03/22/2018 10:57 AM 509 .travis.yml
03/22/2018 10:57 AM 453 build.sbt
03/22/2018 10:57 AM 439 LICENSE
03/22/2018 …Run Code Online (Sandbox Code Playgroud) python ×5
type-hinting ×3
scala ×2
ubuntu ×2
ansible ×1
giter8 ×1
gradle ×1
gradlew ×1
linux ×1
mypy ×1
pycharm ×1
python-3.5 ×1
python-3.6 ×1
python-3.8 ×1
sbt ×1
shapeless ×1