程序终止后,Ruby获取输入到控制台命令行

如何解决程序终止后,Ruby获取输入到控制台命令行

| 我试图用两个额外的线程来建立一个简单的ruby程序。 一个线程是检查串行端口中的数据,并在发现任何内容时填充变量。 第二个线程是对\'gets \'的调用,返回时将停止程序。 主线程只是将第一个附加线程存储的值输出到控制台(该程序是基于控制台的数据记录器)。 我的问题是第二个线程启动正常,如您在输出中的“按Enter ...”注释中所见。
D:\\Documents and Settings\\JMEDDING\\My Documents\\Ruby scripts>c-scope.rb -t
\"Press \'Enter\' to end process\"
   511,511,485 |    |    |    |    |    +    |    |    |    |    | 536
   511,485 |    |    |    |    |    +    |    |    |    |    | 536
   512,485 |    |    |    |    |    XO   |    |    |    |    | 536
   512,512,485 |    |    |    |    |    |+   |    |    |    |    | 536
但是从中返回的任何数据   输入=获取 不会进入程序。相反,在使用ctrl-c杀死程序之后,可以在控制台命令行上看到它。 我在Windows的ruby控制台中运行它。这以前曾经可以正常工作,但是我在某一时刻重新安排了代码,现在它不配合了。我已经在下面复制了整个程序。我想这很简单,但是我完全陷入了困境,因此感谢您的关注。 乔恩
require \'serialport\'

TEST = true if ARGV[0] == \'--test\' || ARGV[0] == \'-t\' 

# Edit the two settings below
port =  \"COM6\"   #\"/dev/tty.usbserial-A600b1Q6\"
baud = 9600

begin
  if RUBY_PLATFORM =~ /win32/ || RUBY_PLATFORM == \"i386-mingw32\"
    require \'Win32/Console/ANSI\' 
  end

rescue LoadError
  raise \"You must \'gem install win32console\' to use color on Windows\"
end

if TEST
    sp = nil
else
    sp = SerialPort.new port,baud,8,1,SerialPort::NONE
end


symbols = [\"X\",\"O\",\"@\",\"#\"]
vals = []       #max four values to plot
input = nil
len = 50

max = 0
min = 1200

if TEST
    vals = [511,511]
end

def colorize(text,color_code)
  \"\\033[1;#{color_code}m#{text}\\033[0m\"
end

def red(text); colorize(text,\"31\"); end
def green(text); colorize(text,\"32\"); end
def blue(text); colorize(text,\"34\"); end
def color_the_symbols(text,symbols)
    color = 31      # \"+\" = red,then green,yellow,blue,pink
    chars = [\"+\"] + symbols 
    chars.each_with_index do |s,i|
        text.gsub!(s,colorize(s,\"#{color + i}\"))
    end
    text
end


def base_string (len,min,max,vals,symbols)

    s = \"\" 
    (0..len).each {|i| s += i%5 == 0 ? \"|\" : \" \"}
    vals.each_with_index do |val,i|
        pos = len * (val - min)/ (max - min)
        char = symbols.include?(s[pos] ) ? \"+\" : symbols[i]
        s[pos] = char
    end

    color_the_symbols s,symbols
end

#listen to STDIN for stop signal
Thread.new do
    p \"Press \'Enter\' to end process\"
    input = gets    #pressing enter will stop the other loops
end

sleep(1)

#listening thread
Thread.new do
    while !input
        if TEST
            (0...vals.count).each {|i| vals[i] += rand(3) - 1}
        else
            c = \"\"
            word = \"\"

            until c == \"\\n\"
                c = sp.getc
                word << c.to_s
                #p \"Flushing buffer #{c}\" 
            end
            #p word.chomp
            vals[0] = Integer(word.chomp)
        end
        sleep(0.5)
    end
end

while !input    #will be true until enter key is pressed
    while vals.count == 0
        #wait for firs data to show up
        sleep (0.1)
    end

    for i in (0...vals.count) do
        #validate min and max
        max = (vals[i] * 1.05).to_i if vals[i] > max
        min = (vals[i] * 0.95).to_i if vals[i] < min        
    end
    output = base_string(len,symbols)
    output = \"             #{red(min.to_s)} \" + output + \" #{red(max.to_s)}\"
    color = 32
    vals.each_with_index do |val,i|
        output = \"  #{colorize(\"%4d,\" % val,\"#{color + i}\")}\"  + output
    end
    puts output
    sleep(1)
end
    

解决方法

        我认为某个地方有错误,但是该通知被线程行为掩盖了。我进行了一些无关的更改,并且在进行一些调试之后,它又开始工作了。抱歉,我不能更具体。     ,        你需要
thread = Thread.new
  # blah
end

thread.join
如果您希望该线程在程序完成之前完成其工作。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-