标签: stdin

为sys.stdin设置较小的缓冲区大小?

我正在使用以下bash命令模式运行memcached:

memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log
Run Code Online (Sandbox Code Playgroud)

尝试跟踪无与伦比的获取到平台键的集合.

memtracer脚本位于下方并按预期工作,只有一个小问题.看到中间日志文件大小,memtracer.py在memkeywatchYMD.log大小约为15-18K之前不会开始输入.有没有更好的方法来读取stdin或者可能是将缓冲区大小降低到1k以下以获得更快的响应时间?

#!/usr/bin/python

import sys
from collections import defaultdict

if __name__ == "__main__":


    keys = defaultdict(int)
    GET = 1
    SET = 2
    CLIENT = 1
    SERVER = 2

    #if <
    for line in sys.stdin:
        key = None
        components = line.strip().split(" ")
        #newConn = components[0][1:3]
        direction = CLIENT if components[0].startswith("<") else SERVER

        #if lastConn != newConn:        
        #    lastConn = newConn

        if direction == CLIENT:            
            command = SET if …
Run Code Online (Sandbox Code Playgroud)

python stdin buffering

24
推荐指数
4
解决办法
2万
查看次数

如何从外部进程向现有进程的STDIN写入数据?

我正在寻找STDIN从外部进程向现有进程写入数据的方法,并发现了类似的问题 如何将数据从Python中的不同本地/远程进程流式传输到程序的STDIN中?在stackoverlow中.

在那个帖子中,@ Michael说我们可以在下面的路径中获取现有进程的文件描述符,并允许在Linux上将数据写入其中.

/proc/$PID/fd/
Run Code Online (Sandbox Code Playgroud)

所以,我创建了一个下面列出的简单脚本来测试从外部进程向脚本STDIN(和TTY)写入数据.

#!/usr/bin/env python

import os, sys

def get_ttyname():
    for f in sys.stdin, sys.stdout, sys.stderr:
        if f.isatty():
            return os.ttyname(f.fileno())
    return None

if __name__ == "__main__":
    print("Try commands below")

    print("$ echo 'foobar' > {0}".format(get_ttyname()))
    print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))

    print("read :: [" + sys.stdin.readline() + "]")
Run Code Online (Sandbox Code Playgroud)

这个测试脚本显示的路径STDINTTY,然后,等待一个写它STDIN.

我启动了这个脚本并在下面收到了消息.

Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
Run Code Online (Sandbox Code Playgroud)

所以,我执行的命令echo 'foobar' …

linux stdin process file-descriptor tty

24
推荐指数
2
解决办法
3万
查看次数

如何让ssh从stdin接收密码

如何使SSH从stdin读取密码,默认情况下不会这样做?

passwords ssh stdin

23
推荐指数
5
解决办法
5万
查看次数

在管道的命令行上创建文件名时,如何在zip中指定文件名?

我正在尝试从正在管道输入的文件内容创建一个zip文件,例如

mysql [params and query] | zip -q output.zip -
Run Code Online (Sandbox Code Playgroud)

这会正确写入zip,但是当您打开zip时,其中的文件称为" - ".有没有办法指定数据中管道的文件名应该在zip中?

linux zip stdin pipe

23
推荐指数
4
解决办法
2万
查看次数

将文件用作stdin和stdout用于子进程

如何使用python子进程模块复制以下批处理命令?

myprogram < myinput.in > myoutput.out
Run Code Online (Sandbox Code Playgroud)

换句话说,如何myprogram使用myinput.in标准输入和myoutput.out标准输出的内容运行?

python stdin subprocess stdout

23
推荐指数
1
解决办法
2万
查看次数

Python相当于Perl的while(<>){...}?

我写了很多小脚本,逐行处理文件.在Perl中,我使用

while (<>) {
    do stuff;
}
Run Code Online (Sandbox Code Playgroud)

这很方便,因为它不关心输入来自何处(文件或标准输入).

在Python中我使用它

if len(sys.argv) == 2: # there's a command line argument
    sys.stdin = file(sys.argv[1])
for line in sys.stdin.readlines():
    do stuff
Run Code Online (Sandbox Code Playgroud)

这似乎不是很优雅.是否有一个容易处理文件/标准输入的Python习语?

python stdin

22
推荐指数
3
解决办法
4942
查看次数

如何读取node.js中的整个文本流?

在RingoJS中有一个叫做的函数read,它允许你读取整个流,直到到达终点.这在您创建命令行应用程序时很有用.例如,您可以编写如下tac 程序:

#!/usr/bin/env ringo

var string = system.stdin.read(); // read the entire input stream
var lines = string.split("\n");   // split the lines

lines.reverse();                  // reverse the lines

var reversed = lines.join("\n");  // join the reversed lines
system.stdout.write(reversed);    // write the reversed lines
Run Code Online (Sandbox Code Playgroud)

这允许您启动shell并运行tac命令.然后根据需要输入任意数量的行,完成后可以按Ctrl+ D(或Windows上的Ctrl+ Z)表示传输结束.

我想在node.js中做同样的事情,但我找不到任何会这样做的函数.我想用的readSync 功能,fs图书馆到模拟如下,但无济于事:

fs.readSync(0, buffer, 0, buffer.length, null);
Run Code Online (Sandbox Code Playgroud)

对标准输入文件描述符(第一个参数)是0.所以它应该从键盘读取数据.相反,它给了我以下错误:

Error: ESPIPE, invalid seek …
Run Code Online (Sandbox Code Playgroud)

javascript stdin stream node.js ringojs

22
推荐指数
4
解决办法
2万
查看次数

.NET中没有"StandardIn未被重定向"错误(C#)

我想用stdin做一个简单的应用程序.我想在一个程序中创建一个列表并在另一个程序中打印它.我想出了下面的内容.

我不知道app2是否有效但是在app1中我得到了异常"StandardIn尚未被重定向".在writeline上(在foreach声明中).我该怎么办?

注意:我尝试将UseShellExecute设置为true和false.两者都会导致此异常.

        //app1
        {
            var p = new Process();
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.FileName = @"path\bin\Debug\print_out_test.exe";
            foreach(var v in lsStatic){
                p.StandardInput.WriteLine(v);
            }
            p.StandardInput.Close();
        }

    //app 2
    static void Main(string[] args)
    {
        var r = new StreamReader(Console.OpenStandardInput());
        var sz = r.ReadToEnd();
        Console.WriteLine(sz);
    }
Run Code Online (Sandbox Code Playgroud)

.net c# stdin

21
推荐指数
3
解决办法
2万
查看次数

如何确定sys.stdin是从文件重定向还是从另一个进程管道传输?

在一个旨在从shell运行的简单Python脚本中,我是否可以可靠地确定sys.stdin是否已从实际文件重定向而不是从另一个进程传输?

我想根据stdin是来自数据文件还是来自另一个进程通过管道流来改变运行时行为.

正如预期的那样,isatty()在两种情况下都返回False.这是一个快速isatty()测试:

# test.py
import os
import sys
print sys.stdin.isatty()
print os.isatty(sys.stdin.fileno())
Run Code Online (Sandbox Code Playgroud)

测试:

python test.py < file.txt
Run Code Online (Sandbox Code Playgroud)

生产:

False
False
Run Code Online (Sandbox Code Playgroud)

和:

ls -al | python test.py
Run Code Online (Sandbox Code Playgroud)

生产:

False
False
Run Code Online (Sandbox Code Playgroud)

有这样做的pythonic方法吗?

Unix/Linux特定的很好,但知道是否可以以可移植的方式执行此操作会很好.

编辑:请注意评论者:我为什么关心?好吧,在我的情况下,我想处理从另一个进程传输时不规则间隔的时间戳数据; 当我从文件中播放预先录制的数据时,我想使用固定或可变延迟重放它.

我同意使用更干净的方法可能是有利的(我可以想到几个,包括在回放流中插入延迟的中间脚本),但我最终好奇.

python stdin io-redirection

21
推荐指数
1
解决办法
3738
查看次数

有没有办法用JavaScript读取标准输入?

我看到了很多其他语言但不是JavaScript.

我正在尝试这样的问题:这个(codechef.com),当然程序需要能够像C++和其他语言那样读取标准.

编辑:谢谢你的答案.我想要这个功能的主要原因是我可以回答CodeChef上的问题; Codechef将多个输入发送到作为答案的文件/程序(当然程序必须以所需的方式响应才能使答案正确).

javascript stdin

20
推荐指数
2
解决办法
3万
查看次数