标签: stdin

如何在Windows上阅读Perl中的管道输入?

我试图在Perl中创建一些基本上像Unix tee命令的东西.我正在尝试阅读每一行STDIN,在其上运行替换,然后打印它.(最后,也将它打印到一个文件.)如果我使用控制台输入,这是有效的,但如果我尝试将输入管道输入到命令它不会做任何事情.这是一个简单的例子:

print "about to loop\n";
while(<STDIN>)
{
  s/2010/2009/;
  print;
}
print "done!\n";
Run Code Online (Sandbox Code Playgroud)

我尝试像这样管道dir命令:

C:\perltest>dir | mytee.pl
about to loop
done!

为什么没有看到管道输入?(我在WinXP上使用Perl 5.10.0,如果这是相关的.)

windows perl stdin pipe

18
推荐指数
3
解决办法
4489
查看次数

为什么我们不能一次从System.in读取一个字符?

下面的程序打印标准写入的每个字符,但只有在写完新行之后(至少在我的系统上!).

public class Test {
    public static void main(String[] args) throws java.io.IOException {
        int c;
        while ((c = System.in.read()) != -1)
            System.out.print((char) c);
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以防止人们写"按任意键继续"之类的内容,并强制执行"按Enter键继续"等操作.

  • 这是什么原因?
  • 它是Java的限制吗?
  • 这种行为依赖于系统(我在Ubuntu上)吗?它在Mac上如何运作?视窗?
  • 它是否依赖于我运行应用程序的特定终端?(对我来说,它在Eclipse和gnome-terminal中表现得像这样)
  • 有解决方法吗?

java stdin

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

node.js:如何检测空的stdin流?

我有一个node.js脚本/服务器,它在启动时读取stdin的一些输入.但是,有时候没有数据要传入.这很麻烦,因为在这种情况下似乎既不调用data也不end调用事件.如何在node.js代码中检测到这种情况?

我想避免在输入结束时附加特殊的"结束"字符,以免给客户带来不便.相关代码如下:

  var newHTML = '';
  var gfm = spawn(__dirname + '/node_modules/docter/bin/github-flavored-markdown.rb');
  process.stdin.on('data', function(chunk){
    gfm.stdin.write(chunk);
  });
  process.stdin.on('end', function(){
    gfm.stdin.end();
  });
  gfm.stdout.on('data', function(data) {
    newHTML += data;
  });
  gfm.on('exit',function(ecode){
    socket.emit('newContent', newHTML);
  });
  process.stdin.resume();
Run Code Online (Sandbox Code Playgroud)

stdin detect node.js

18
推荐指数
4
解决办法
5485
查看次数

如何从python中的stdin逐行读取

每个人都知道如何计算C中STDIN中的字符.但是,当我尝试在python3中执行此操作时,我发现它是一个谜题.(counter.py)

import sys
chrCounter = 0

for line in sys.stdin.readline():
    chrCounter += len(line)

print(chrCounter)
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过测试程序

python3 counter.py < counter.py
Run Code Online (Sandbox Code Playgroud)

答案只是第一行"import sys"的长度.实际上,程序只读取标准输入的第一行,并丢弃其余部分.

如果我用sys.stdin.read()代替sys.stdin.readline它将会工作.

import sys
print(len(sys.stdin.read()))
Run Code Online (Sandbox Code Playgroud)

但是,很明显,该程序不适合大量输入.请给我一个优雅的解决方案.谢谢!

python stdin

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

如何强制ffmpeg进入非交互模式?

有时您希望ffmpeg询问您是否应该覆盖文件.有时它只是一个你喜欢的脚本如果出现问题就会失败.即如果你有问题,也不要依赖stdin来回答.

stdin ffmpeg interactive non-interactive

18
推荐指数
1
解决办法
7851
查看次数

PowerShell的管道增加了换行

我正在尝试将一个字符串传递给程序的STDIN 而没有任何尾随换行符(除非该字符串本身实际上以换行符结束).我试过谷歌搜索,但我只发现有人试图打印到控制台没有拖尾换行,在这种情况下Write-Host需要一个参数-NoNewLine.但是,要将它传输到另一个程序,我需要Write-Output或类似的没有这样的参数.现在似乎Write-Output甚至不是问题:

Z:\> (Write-Output "abc").Length
3
Run Code Online (Sandbox Code Playgroud)

但是,只要我将它传送到另一个程序并在那里读取字符串,我就会得到一个额外的换行符.例如,我尝试了这个Ruby片段:

Z:\> Write-Output "abc" | ruby -e "p ARGF.read"
"abc\n"
Run Code Online (Sandbox Code Playgroud)

我检查了收到的实际字符串是abc\n.其他几种语言(至少是C#,Java和Python)也是如此,所以我认为这是PowerShell的一个问题,而不是阅读的语言.

作为进一步的测试,我Write-Output用另一个Ruby脚本替换自己:

Z:\> ruby -e "$> << 'abc'"
abcZ:\>
Run Code Online (Sandbox Code Playgroud)

(也就是说,\n脚本的STDOUT 肯定没有.)

但是,当我将它传递到另一个脚本时:

Z:\> ruby -e "$> << 'abc'" | ruby -e "p ARGF.read"
"abc\n"
Run Code Online (Sandbox Code Playgroud)

我相信它是添加换行的管道.我该如何避免?我实际上希望能够控制输入是否以换行结束(通过将其包含在输入中或省略它).

(作为参考,我还测试了已包含尾随换行符的字符串,在这种情况下,管道不会添加另一个换行符,所以我猜它只是确保拖尾换行符.)

我最初在PowerShell v3中遇到过这种情况,但我现在正在使用v5,但仍然存在同样的问题.

powershell stdin io-redirection linefeed

18
推荐指数
1
解决办法
2424
查看次数

将stdin读为二进制

我有代码打开并从二进制文件中读取文件.

with open (file, mode="rb") as myfile:
    message_string=myfile.read()
    myfile.close
Run Code Online (Sandbox Code Playgroud)

我现在需要从stdin读取相同的内容.但我无法弄清楚如何阅读二进制文件.

该错误仅表示字节字符串.
有什么建议?

python stdin

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

如果在Python中没有数据传输,如何从stdin或文件中读取?

我有一个CLI脚本,希望它从文件中读取数据.它应该能够以两种方式阅读:

  • cat data.txt | ./my_script.py
  • ./my_script.py data.txt

- 有点像grep,例如.

我知道的:

  • sys.argvoptparse让我轻松地阅读任何指定参数和选项.
  • sys.stdin 让我读一下管道传输的数据
  • fileinput 使整个过程自动化

不幸:

  • 使用fileinputstdin和任何args作为输入.所以我不能使用非文件名的选项,因为它试图打开它们.
  • sys.stdin.readlines() 工作正常,但如果我不管道任何数据,它会挂起,直到我进入 Ctrl + D
  • 我不知道如何实现"如果没有在stdin中,从args中的文件读取"因为stdin总是True在布尔上下文中.

如果可能的话,我想以便携的方式做到这一点.

python stdin pipe command-line-interface

17
推荐指数
3
解决办法
8990
查看次数

如何在python上更改stdin编码

我在同一个项目中使用windows和linux机器.Windows上stdin的默认编码是cp1252,linux上的默认编码是utf-8.

我想把一切都变成uft-8.可能吗?我该怎么做?

encoding stdin stdout python-2.x

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

从Go中的标准输入读取一个字符(不按Enter键)

我想要我的应用节目:

press any key to exit ...

当我按任意键时,它会退出.

我怎样才能做到这一点?

注意:我用谷歌搜索了但是我发现的所有内容都需要在最后输入.我想要像Console.ReadKey()C#中的东西.

我正在运行MS Windows.

stdin go

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