我正在尝试捕获IPython Notebook魔术函数的结果对象.特别%timeit
所以下面的代码......
import time
def say_hello(n):
time.sleep(n)
print "hello"
t = %timeit say_hello(5)
Run Code Online (Sandbox Code Playgroud)
打印到stdout:
1 loops, best of 3: 5 s per loop
Run Code Online (Sandbox Code Playgroud)
但是,我想捕获%timeit say_hello(5)
变量的结果t
.
调用TimeitResult
生成的对象是由生成的%timeit
,但我无法弄清楚如何从Notebook中访问它.
我想要一个更清洁的解决方案,而不是使用sys.stdout
技巧手动捕获stdout (此代码将是演示文稿的一部分,所以我试图尽可能地保持它直接).有人有主意吗?
我试图使用go/parse
,go/token
和go/ast
模块对 Go 项目中的函数调用进行一些静态分析,但我不知道如何确定给定ast.Ident
对象的类型。
例如,如果解析这样的内容:
textToContain := bytes.NewBuffer([]byte{})
// lots of other code
text := textToContain.String() // <- I care about this function call
Run Code Online (Sandbox Code Playgroud)
(这是从这里解析的:file)
编辑:需要大量代码来解析它,所以我没有将其发布在这里,但您可以在以下位置找到它作为要点: https: //gist.github.com/EricChiang/6735340c5fa3d2de2b73
ast.Print
我使用该函数打印了以下代码
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.Ident {
4 . . . Name: "textToContain"
5 . . . Obj: *ast.Object {
6 . . . . Kind: var
7 . . . . Name: "textToContain" …
Run Code Online (Sandbox Code Playgroud) 当我尝试在我的Mac上构建以下程序时,我遇到了一个构建错误:undefined: syscall.TCPInfo
尽管该变量已明确记录http://golang.org/pkg/syscall/#TCPInfo
package main
import "syscall"
func main() {
_ = syscall.TCPInfo{}
}
Run Code Online (Sandbox Code Playgroud)
这是我的go工具版本.
$ go version
go version go1.3 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
我认为这可能是一个缺乏操作系统支持的问题,所以我在http://play.golang.org上尝试过,但看起来很多记录的变量只是在syscall
包中随机丢失:http://play.golang.组织/ p/w3Uk6NaZVy
我错过了什么吗?
我正在尝试为脚本提供 cap_net_bind_service Linux 功能。但是使用 setcap 似乎不起作用。
$ cat listen.sh
#!/bin/bash
python -m SimpleHTTPServer 80
$ getcap listen.sh
listen.sh =
$ sudo setcap cap_net_bind_service=+eip ./listen.sh
$ getcap listen.sh
listen.sh = cap_net_bind_service+eip
$ ls -al listen.sh
-rwxrwxr-x. 1 eric eric 43 Jul 11 23:01 listen.sh
$ ./listen.sh
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
...
File "/usr/lib64/python2.7/SocketServer.py", line 434, in server_bind
self.socket.bind(self.server_address)
File "/usr/lib64/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 13] …
Run Code Online (Sandbox Code Playgroud) 我有一个Go程序
package main
import (
"crypto/hmac"
"crypto/sha1"
"fmt"
)
func main() {
val := []byte("nJ1m4Cc3")
hasher := hmac.New(sha1.New, val)
fmt.Printf("%x\n", hasher.Sum(nil))
// f7c0aebfb7db2c15f1945a6b7b5286d173df894d
}
Run Code Online (Sandbox Code Playgroud)
和Python(2.7)程序试图重现Go代码(使用crypto/hmac
)
import hashlib
val = u'nJ1m4Cc3'
hasher = hashlib.new("sha1", val)
print hasher.hexdigest()
# d67c1f445987c52bceb8d6475c30a8b0e9a3365d
Run Code Online (Sandbox Code Playgroud)
使用该hmac
模块给出了不同的结果,但仍然与Go代码不同.
import hmac
val = 'nJ1m4Cc3'
h = hmac.new("sha1", val)
print h.hexdigest()
# d34435851209e463deeeb40cba7b75ef
Run Code Online (Sandbox Code Playgroud)
为什么这些在同一输入上使用相同的哈希时会打印不同的值?