有没有办法提前读取一行来测试下一行是否包含特定的标签数据?
我正在处理一个具有开始标记但没有结束标记的格式.
我想读一行将它添加到一个结构然后测试下面的行,以确保它不是一个新的"节点",如果它不是继续添加,如果它是关闭该结构并创建一个新的
我能想到的唯一解决方案就是让两个流读取器在同一时间沿着锁定步骤出现,但这看起来很浪费(如果它甚至可以工作)
我需要像peek但peekline这样的东西
我希望能够Vim从终端中运行的node.js程序打开,创建一些内容,保存并退出Vim,然后抓取文件的内容.
我正在尝试做这样的事情:
filename = '/tmp/tmpfile-' + process.pid
editor = process.env['EDITOR'] ? 'vi'
spawn editor, [filename], (err, stdout, stderr) ->
text = fs.readFileSync filename
console.log text
Run Code Online (Sandbox Code Playgroud)
但是,当它运行时,它只是挂起终端.
我也试过了exec,得到了同样的结果.
更新:
由于在readline运行的提示符下键入的命令启动了此过程,因此这很复杂.我完全将我最新版本的相关部分提取到文件中.这是完整的:
{spawn} = require 'child_process'
fs = require 'fs'
tty = require 'tty'
rl = require 'readline'
cli = rl.createInterface process.stdin, process.stdout, null
cli.prompt()
filename = '/tmp/tmpfile-' + process.pid
proc = spawn 'vim', [filename]
#cli.pause()
process.stdin.resume()
indata = (c) ->
proc.stdin.write c
process.stdin.on 'data', …Run Code Online (Sandbox Code Playgroud) 我在OS X 10.11.4上通过rbenv安装了Ruby 2.3.0p0.在IRB会议期间,历史记录正常.但是,我无法跨会话访问IRB历史记录.
我尝试了我的系统Ruby,2.0.0p648,IRB会话的历史记录工作正常.我尝试通过rbenv安装相同版本的Ruby,它也有工作历史.
我比较了IRB.conf工作会话和非工作会话之间的值,没有看起来不合适(尽管奇怪的是,在这两种情况下,irb/ext/save-history.rb都是空白文件).
查看我的.irb_history文件,它似乎被替换,而不是附加到最新会话的命令.我可以加载2.0.0 IRB会话并滚动这些命令就好了.
我已经尝试过rbenv irb历史记录中列出的答案并没有成功保存.
我也尝试了irb历史中选定的答案不起作用.我不得不改变选择的答案来替换#nitems方法.这表明正在从历史文件中读出行,并将其推送到Readline::HISTORY.然而,检查Readline::HISTORY显示没有.
通过将我的.irb_history中的前一行添加到Readline历史记录中Readline.readline,并指定add_hist = true,我可以破解历史.但是,绝对不是将以前的命令添加到Readline的正确方法.
我知道我可以切换到像撬的东西,但我想弄清楚这一点.有关为什么命令没有被添加到Readline的任何建议,以及如何更改它?
标题比我的实际目标更具体:
我有一个命令行程序,它使用GNU Readline,主要用于命令历史记录(即使用向上箭头检索以前的命令)和其他一些细节.现在,程序的输出中间散布着用户的输入,有时候输出是正常的,但输出是异步的(它是通过网络连接来响应输入命令),有时会变得烦人(例如,如果用户输出行时)正在输入新的输入).
我想为这个程序添加一个功能:输出的单独"窗口".我想过为此使用ncurses.但是从ncurses FAQ中可以看出,这两个库并不容易一起使用.
我可能会考虑使用Editline或tecla而不是Readline,但我不清楚其中任何一个是否能解决我的问题.我还考虑使用除ncurses之外的其他东西,包括提供两种功能的库(文本模式窗口和命令历史记录),但我不知道什么是最好的.
哦,对彩色文字的支持可能会得到奖励积分.我怀疑我可能能够做到这一点与Readline库,所以也许这是一个单独的问题,但如果我的问题的解决方案也可以轻松一点颜色添加到输出,那就更好了.
我正在使用Ubuntu Hardy(Linux 2.6).
我使用BufferedReader的readLine()方法从套接字读取文本行.
没有明显的方法来限制读取行的长度.
我担心数据源可能(恶意地或错误地)写入大量数据而没有任何换行符,这将导致BufferedReader分配无限量的内存.
有没有办法避免这种情况?或者我必须实现readLine()自己的有界版本?
getCommentary=function(){
Commentary=readLines(file("C:\\Commentary\\com.txt"))
return(Commentary)
close(readLines)
closeAllConnections()
}
Run Code Online (Sandbox Code Playgroud)
我不知道这个功能有什么问题.当我在R中运行它时,它不断给我以下警告:
Warning message:
closing unused connection 5 ("C:\\Commentary\\com.txt")
Run Code Online (Sandbox Code Playgroud) 目前我有以下代码供阅读InputStream.我将整个文件存储到StringBuilder变量中,然后处理该字符串.
public static String getContentFromInputStream(InputStream inputStream)
// public static String getContentFromInputStream(InputStream inputStream,
// int maxLineSize, int maxFileSize)
{
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String lineSeparator = System.getProperty("line.separator");
String fileLine;
boolean firstLine = true;
try {
// Expect some function which checks for line size limit.
// eg: reading character by character to an char array and checking for
// linesize in a loop until line feed is encountered.
// if …Run Code Online (Sandbox Code Playgroud) 我刚从源代码安装了Python 3.6.1,然后运行sudo pip3 install readline安装readline模块.但是当我启动Python shell时,无论我输入什么,它都会崩溃:
Python 3.6.1 (default, Mar 25 2017, 13:40:56)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello")
*** Error in `python3': munmap_chunk(): invalid pointer: 0x00007fa3c64960a0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fa3c565e7e5]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x1a8)[0x7fa3c566aae8]
python3(PyOS_Readline+0xec)[0x5c3bcc]
python3[0x447cd0]
python3[0x449788]
python3(PyTokenizer_Get+0x9)[0x44a659]
python3[0x44617e]
python3(PyParser_ASTFromFileObject+0xa3)[0x428803]
python3(PyRun_InteractiveOneObject+0x122)[0x428a42]
python3(PyRun_InteractiveLoopFlags+0x6e)[0x428dce]
python3(PyRun_AnyFileExFlags+0x3c)[0x428efc]
python3(Py_Main+0xe4f)[0x43ba3f]
python3(main+0x162)[0x41dc52]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fa3c5607830]
python3(_start+0x29)[0x41dd29]
======= Memory map: ========
00400000-00663000 r-xp 00000000 08:05 16779642 /usr/local/bin/python3.6
00862000-00863000 r--p 00262000 08:05 16779642 /usr/local/bin/python3.6
00863000-008c7000 rw-p 00263000 08:05 …Run Code Online (Sandbox Code Playgroud) 这个问题是关于在导航命令历史记录时将R控制台配置为像bash shell一样.它与...有些相关?history.对于括号封闭的多行,我想将R的命令历史导航配置为类似于bash.
目前,当在Linux下在xterm中运行R时,使用向上箭头导航命令历史记录会导致每个前一行被逐一调用,即使一组行已被括在括号中.例如,当将多行函数从文本编辑器复制/粘贴到R控制台时,会发生这种情况.bash不是这样.以下是bash在这方面的功能如何:
在Linux下的xterm中的bash shell中,键入以下五行后...
a=1
{
x=1
y=1
}
Run Code Online (Sandbox Code Playgroud)
...向上箭头的第一次按下会回想起括号括起来的命令的单行重新编写,就像这样......
{ x=1; y=1; }
Run Code Online (Sandbox Code Playgroud)
......第二次报刊会回忆起这个......
a=1
Run Code Online (Sandbox Code Playgroud)
似乎在R中,向上箭头一次向后导航一行,而不管封装.有没有办法配置R,以便它的命令历史导航功能像bash的?
我使用标准技巧来定制交互式Python会话:
$ cat ~/.bashrc
export PYTHONSTARTUP=~/.pystartup
$ cat ~/.pystartup
import os
import sys
import atexit
import readline
import rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
term_with_colors = ['xterm', 'xterm-color', 'xterm-256color', 'linux', 'screen', 'screen-256color', 'screen-bce']
if os.environ.get('TERM') in term_with_colors:
green='\033[32m'
red='\033[31m'
reset='\033[0m'
sys.ps1 = red + '>>> ' + reset
sys.ps2 = green + '... ' + reset
del term_with_colors
atexit.register(save_history)
del os, sys, atexit, readline, rlcompleter, save_history, historyPath
现在我得到上下文敏感的完成和颜色提示.
问题来自颜色提示 - 当我在交互式Python会话中调用历史搜索 - 向后搜索 …
readline ×10
java ×2
python ×2
r ×2
terminal ×2
c# ×1
coffeescript ×1
console ×1
editline ×1
gedcom ×1
interpreter ×1
irb ×1
libreadline ×1
macos ×1
navigation ×1
ncurses ×1
node.js ×1
python-3.6 ×1
ruby ×1
ruby-2.3 ×1
streamreader ×1
vim ×1
warnings ×1