我想运行一个脚本,它基本上显示如下内容:
Installing XXX... [DONE]
Run Code Online (Sandbox Code Playgroud)
现在,此刻,我在功能成功后使用print打印整行.但是,我现在希望它首先打印"安装xxx ...",并在功能运行之后添加"DONE"标签; 但是在同一条线上.
有任何想法吗?
我对这三个文件的目的感到困惑.如果我的理解是正确的,stdin程序写入其在进程中运行任务的请求stdout的文件是内核写入其输出stderr的文件,并且请求它的进程从中访问信息,并且是文件到输入所有例外情况.在打开这些文件以检查这些文件是否确实发生时,我发现似乎没有任何建议!
我想知道的是这些文件的目的究竟是什么,用非常少的技术术语绝对愚蠢地回答!
是否有任何bash命令可以让你获得STDOUT的第n行?
也就是说,会采取这种做法
$ ls -l
-rw-r--r--@ 1 root wheel my.txt
-rw-r--r--@ 1 root wheel files.txt
-rw-r--r--@ 1 root wheel here.txt
Run Code Online (Sandbox Code Playgroud)
并做一些类似的事情
$ ls -l | magic-command 2
-rw-r--r--@ 1 root wheel files.txt
Run Code Online (Sandbox Code Playgroud)
我知道在编写要重用的脚本时这是不好的做法,但是当我每天使用shell时,能够以这种方式过滤我的STDOUT对我来说是有用的.
我也意识到这将是半简单的命令写入(缓冲区STDOUT,返回一个特定的行),但我想知道是否有一些标准的 shell命令来执行此操作,而无需我将脚本放到位.
我有一个PowerShell脚本,我想将输出重定向到一个文件.问题是我无法改变调用此脚本的方式.所以我做不到:
.\MyScript.ps1 > output.txt
Run Code Online (Sandbox Code Playgroud)
如何在执行期间重定向PowerShell脚本的输出?
我一直对使用print语句输出到终端需要多长时间感到惊讶/沮丧.在最近的一些令人痛苦的缓慢记录之后,我决定调查它并且非常惊讶地发现几乎所有花费的时间都在等待终端处理结果.
能以某种方式加速写入stdout吗?
我写了一个脚本(print_timer.py在这个问题的底部),比较写入100k行到stdout,文件和stdout重定向到的时间/dev/null.这是时间结果:
$ python print_timer.py
this is a test
this is a test
<snipped 99997 lines>
this is a test
-----
timing summary (100k lines each)
-----
print :11.950 s
write to file (+ fsync) : 0.122 s
print with stdout = /dev/null : 0.050 s
Run Code Online (Sandbox Code Playgroud)
哇.为了确保python不在幕后做某事,比如认识到我将stdout重新分配给/ dev/null或其他东西,我在脚本之外进行了重定向...
$ python print_timer.py > /dev/null
-----
timing summary (100k lines each)
-----
print : 0.053 s
write to file (+fsync) : 0.108 s
print with …Run Code Online (Sandbox Code Playgroud) Bash命令的输出是否存储在任何寄存器中?例如类似于$?捕获输出而不是退出状态.
我可以将输出分配给变量:
output=$(command)
Run Code Online (Sandbox Code Playgroud)
但这更像打字......
似乎较新版本的bash具有&>运算符,如果我理解正确的话,将stdout和stderr重定向到一个文件(&>>改为附加到文件,就像Adrian澄清的那样).
实现相同目标的最简单方法是什么,而是管道到另一个命令?
例如,在这一行:
cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError
Run Code Online (Sandbox Code Playgroud)
我希望grep能够匹配stdout和stderr中的内容(实际上,将它们组合成一个流).
注意:这个问题是询问管道,而不是重定向 - 因此它不是它当前标记为重复的问题的副本.
我正在使用Python的日志记录模块,我想暂时禁用控制台日志记录,但它不起作用.
#!/usr/bin/python
import logging
logger = logging.getLogger() # this gets the root logger
# ... here I add my own handlers
#logger.removeHandler(sys.stdout)
#logger.removeHandler(sys.stderr)
print logger.handlers
# this will print [<logging.StreamHandler instance at ...>]
# but I may have other handlers there that I want to keep
logger.debug("bla bla")
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了bla blaon stdout,我不知道如何安全地禁用控制台处理程序.我怎么能确定我暂时删除了控制台StreamHandler而不是另一个?
我正在使用python ftplib来编写一个小的FTP客户端,但是包中的一些函数不返回字符串输出,而是打印到stdout.我想重定向stdout到一个对象,我将能够从中读取输出.
我知道stdout可以重定向到任何常规文件:
stdout = open("file", "a")
Run Code Online (Sandbox Code Playgroud)
但我更喜欢不使用本地驱动器的方法.
我正在寻找类似于BufferedReaderJava的东西,可用于将缓冲区包装到流中.
我有一个python脚本parse.py,它在脚本中打开一个文件,比如file1,然后做一些事情可能会打印出总字符数.
filename = 'file1'
f = open(filename, 'r')
content = f.read()
print filename, len(content)
Run Code Online (Sandbox Code Playgroud)
现在,我使用stdout将结果定向到我的输出文件 - 输出
python parse.py >> output
Run Code Online (Sandbox Code Playgroud)
但是,我不想手动执行此文件,有没有办法自动处理每个文件?喜欢
ls | awk '{print}' | python parse.py >> output
Run Code Online (Sandbox Code Playgroud)
那么问题是如何从standardin读取文件名?或者已经有一些内置函数可以轻松完成ls和那些工作?
谢谢!