有没有人有一个方便的正则表达式,可以匹配任何合法的DNS主机名或IP地址?
编写一个可以在95%的时间内工作的一个很容易,但是我希望得到一些经过充分测试的东西,以完全匹配最新的RFC主机名规范.
我正在尝试在bash中编写一个函数来访问脚本命令行参数,但是它们被替换为函数的位置参数.如果函数没有显式传递,是否有任何方法可以访问命令行参数?
# Demo function
function stuff {
echo $0 $*
}
# Echo's the name of the script, but no command line arguments
stuff
# Echo's everything I want, but trying to avoid
stuff $*
Run Code Online (Sandbox Code Playgroud) 这是一个愚蠢的问题,但....与GNU Make:
VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)
default:
@echo $(VAR)
@echo $(LOWER_VAR)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,将VAR的内容转换为小写的正确语法是什么?显示的语法(以及我遇到的其他所有内容)导致LOWER_VAR为空字符串.
我正在寻找一种优雅的方法来从Python字典中提取一些值到本地值.
与此相当的东西,但对于更长的值列表更清晰,以及更长的键/变量名称:
d = { 'foo': 1, 'bar': 2, 'extra': 3 }
foo, bar = d['foo'], d['bar']
Run Code Online (Sandbox Code Playgroud)
我原本希望得到以下内容:
foo, bar = d.get_tuple('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
我可以轻松编写一个不错的函数:
def get_selected_values(d, *args):
return [d[arg] for arg in args]
foo, bar = get_selected_values(d, 'foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
但我一直怀疑还有一些其他的内置方式.
我的代码中有很多组件具有持久的go-routines,它们监听事件以触发操作.大多数情况下,他们没有理由(在测试之外)在完成该操作后发回通知.
但是,我的单元测试使用sleep来等待这些异步任务完成:
// Send notification event.
mock.devices <- []sparkapi.Device{deviceA, deviceFuncs, deviceRefresh}
// Wait for go-routine to process event.
time.Sleep(time.Microsecond)
// Check that no refresh method was called.
c.Check(mock.actionArgs, check.DeepEquals, mockFunctionCall{})
Run Code Online (Sandbox Code Playgroud)
这看起来很糟糕,但我还没有找到一个更好的解决方案,不会给非测试使用增加不合理的开销.我错过了合理的解决方案吗?
我非常喜欢让pylint告诉我,如果我使用的是不存在的成员.然而,我的新项目是使用twisted和ephem模块,这似乎混淆了pylint.
如何在不关闭E1101的情况下解除这些(不正确的)pylint警告,并且不会在每个相关呼叫周围发出警告删除注释?
E1101: 8,0: Module 'twisted.internet.reactor' has no 'run' member
E1101: 49,25:sunrise_next: Module 'ephem' has no 'Sun' member
E1101: 63,26:sunset_next: Module 'ephem' has no 'Sun' member
Run Code Online (Sandbox Code Playgroud) 除非通过文件操作阻止通道通信,否则似乎不可能通过带有执行文件操作的goroutine的通道进行双向通信。我如何才能克服这种限制?
表达这个问题的另一种方式...
如果我在goroutine中运行类似于以下内容的循环,如何告诉它关闭连接并退出而不会阻塞下一个Read?
func readLines(response *http.Response, outgoing chan string) error {
defer response.Body.Close()
reader := bufio.NewReader(response.Body)
for {
line, err := reader.ReadString('\n')
if err != nil {
return err
}
outgoing <- line
}
}
Run Code Online (Sandbox Code Playgroud)
它无法从告诉它何时关闭的通道读取数据,因为它阻塞了网络读取(在我的情况下,这可能需要几个小时)。
从goroutine外部简单地调用Close()似乎并不安全,因为Read / Close方法似乎并不是完全线程安全的。
我可以简单地在例程的内部/外部使用对response.Body的引用进行锁定,但是会导致外部代码阻塞,直到挂起的读取完成为止,我特别希望能够中断正在进行的读取。
我需要在 Twisted 中处理 Web 请求时生成资源的绝对 URL。主机、端口和协议 (HTTP/HTTPS) 都可能因部署而异,因此动态查找非常方便。
我需要的 URL 是对当前正在处理的资源 url 的修改,并删除了所有参数,因此只需找到完整的请求 URL 就会有很大帮助。
换句话说,我知道“/path/foo”,但是如何找到“ http://example.com:8080 ”?