我需要一个快速的方法来确定一个给定的端口是否用Ruby打开.我目前正在摆弄这个:
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
Run Code Online (Sandbox Code Playgroud)
如果端口是打开的,它的效果很好,但是它的缺点是它偶尔会坐下等待10-20秒然后最终超时,抛出ETIMEOUT异常(如果端口关闭).我的问题是:
可以将此代码修改为仅等待一秒钟(false如果我们当时没有得到任何回报,则返回)或者是否有更好的方法来检查给定端口上的给定端口是否打开?
编辑:只要它跨平台工作(例如,Mac OS X,*nix和Cygwin),调用bash代码也是可以接受的,尽管我更喜欢Ruby代码.
如何找到当前运行的Python脚本的完整路径?也就是说,我需要做些什么来实现这个目标:
$ pwd
/tmp
$ python baz.py
running from /tmp
file is baz.py
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Highline gem进行Ruby密码输入,因为我有两次用户输入密码,我想消除我传入的块上的重复.例如,我的简单版本现在做的是:
new_pass = ask("Enter your new password: ") { |prompt| prompt.echo = false }
verify_pass = ask("Enter again to verify: ") { |prompt| prompt.echo = false }
Run Code Online (Sandbox Code Playgroud)
而我想改变它是这样的:
foo = Proc.new { |prompt| prompt.echo = false }
new_pass = ask("Enter your new password: ") foo
verify_pass = ask("Enter again to verify: ") foo
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不起作用.这样做的正确方法是什么?
我已经玩了一点CVS,并不是最熟悉它的所有功能,但对我来说,一个巨大的烦恼是试图添加包含更多目录的新目录.运行" cvs add"只会添加当前目录的内容,并且使用" cvs import"看起来不是正确的事情,因为它仍然是我正在生成的所有代码(这个如何声明导入是针对第三方源)
你们知道以任何方式递归地将给定目录中的所有内容添加到当前的CVS项目中(或者如果SVN或git使这更容易)吗?
我想在Go中执行shell命令,并在程序中将结果输出作为字符串.我看到了Rosetta Code版本:
package main
import "fmt"
import "exec"
func main() {
cmd, err := exec.Run("/bin/ls", []string{"/bin/ls"}, []string{}, "", exec.DevNull, exec.PassThrough, exec.PassThrough)
if (err != nil) {
fmt.Println(err)
return
}
cmd.Close()
Run Code Online (Sandbox Code Playgroud)
但这并没有以我可以以编程方式访问的方式捕获实际标准或错误 - 那些仍然打印到常规stdout/stderr.我看到使用Pipe作为out或err可以帮助其他地方,但没有如何这样做的例子.有任何想法吗?
我试图在Go中生成随机数(整数),但无济于事.我找到了rand包crypto/rand,这似乎是我想要的,但我无法从文档中看出如何使用它.这就是我现在正在尝试的:
b := []byte{}
something, err := rand.Read(b)
fmt.Printf("something = %v\n", something)
fmt.Printf("err = %v\n", err)
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这总是输出:
something = 0
err = <nil>
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,以便它实际生成随机数?或者,有没有办法设置这个生成的随机数的上限?
我不完全确定Ruby是否可行,但希望有一种简单的方法可以做到这一点.我想声明一个变量,然后找出变量的名称.也就是说,对于这个简单的片段:
foo = ["goo", "baz"]
Run Code Online (Sandbox Code Playgroud)
如何获取数组的名称(此处为"foo")?如果它确实可能,这是否适用于任何变量(例如,标量,散列等)?
编辑:这是我基本上要做的事情.我正在编写一个包含三个重要变量的类的SOAP服务器,验证代码基本上是这样的:
[foo, goo, bar].each { |param|
if param.class != Array
puts "param_name wasn't an Array. It was a/an #{param.class}"
return "Error: param_name wasn't an Array"
end
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我可以用foo,goo或bar替换'param_name'的实例吗?这些对象都是数组,所以到目前为止我收到的答案似乎不起作用(除了重新设计整个事情ala dbr的答案)
我有一个逗号分隔文件,foo.csv其中包含以下数据:
scale, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982
Run Code Online (Sandbox Code Playgroud)
我基本上有两个问题:
1)如何绘制第一列(x轴)与第二列(y轴)?我正在尝试这个(从阅读本网站):
data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
Error in stripchart.default(x1, ...) : invalid plotting method
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?一个快速谷歌搜索揭示了别人同样的问题,但没有相关的答案.更新:事实证明,如果我跳过中间的两个赋值语句,它可以正常工作.知道为什么会这样吗?
第二个问题在第一个问题之后非常容易:
2)如何绘制第一列(x轴)与y轴上的所有其他列?一旦我解决了我遇到的第一个问题,我认为这很容易,但我只是对R有点新,所以我仍然围绕着它.
在Ruby中,尝试打印String的各个元素给我带来了麻烦.我没有看到每个字符,而是看到了他们的ASCII值:
>> a = "0123"
=> "0123"
>> a[0]
=> 48
Run Code Online (Sandbox Code Playgroud)
我已经在线查看,但无法找到任何方法让原来的"0"退出.我对Ruby有点新意,我知道它必须是简单的东西,但我似乎无法找到它.
在涉及Clojure时,我已经编写了一个非常基本的程序来回应用户输入的内容.然而,它并没有以我认为自然的方式运行.这是代码:
(defn goo []
(print "echo> ")
(def resp (read-line))
(print resp)
)
Run Code Online (Sandbox Code Playgroud)
我希望代码能够像这样运行(对我来说输入foo为输入read-line):
user=> (goo)
echo> foo
foonil
Run Code Online (Sandbox Code Playgroud)
但相反,回声和读取线被切换:
user=> (goo)
foo
echo> foonil
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我缺少一个微妙的东西吗?
编辑:从Joe的回答,更新的正确解决方案是:
(defn goo []
(print "echo> ")
(flush)
(def resp (read-line))
(print resp)
(flush)
)
Run Code Online (Sandbox Code Playgroud)
此外,如果您使用println而不是冲洗,则不需要冲洗print.