我想要执行Test_Pipe.py的输出,我在Linux上尝试了以下代码,但没有成功。Test_Pipe.pyimporttimewhileTrue:print"Someting..."time.sleep(.1)Caller.pyimportsubprocessassubpimporttimeproc=subp.Popen(["python","Test_Pipe.py"],stdout=subp.PIPE,stdin=subp.PIPE)whileTrue:data=proc.stdout.readline()#block/waitprintdatatime.sleep(.1)pr
我有一些脚本本应该停止运行,但会一直挂着。有什么方法可以让我以一种可读的方式弄清楚他们向STDOUT和STDERR写入的内容吗?例如,我尝试过这样做:$tail-f/proc/(pid)/fd/1但这并没有真正起作用。无论如何,这是一个很长的镜头。还有其他想法吗?strace本身就非常冗长且难以阅读。注意:我只对他们的输出感兴趣,对其他任何东西都不感兴趣。我有能力自己弄清楚其他事情;这个问题只关注在启动它之后访问正在运行的进程的stdout和stderr。 最佳答案 由于我不允许编辑Jauco的答案,我将给出对我有用的完整答案(Ru
sys.stdout.flush()是做什么的? 最佳答案 Python的标准输出是缓冲的(这意味着它会在将其写入终端之前收集一些“写入”到标准输出的数据)。调用sys.stdout.flush()会强制它“刷新”缓冲区,这意味着它会将缓冲区中的所有内容写入终端,即使通常它会在这样做之前等待。这里有一些关于(非)缓冲I/O及其有用的有用信息:http://en.wikipedia.org/wiki/Data_bufferBufferedvsunbufferedIO 关于python-sy
在shell中你可以做重定向,>等等,但是在程序启动之后呢?这就是我问这个问题的方式,在我的终端后台运行的程序不断输出烦人的文本。这是一个重要的过程,所以我必须打开另一个shell以避免文本。我希望能够>/dev/null或其他一些重定向,以便我可以继续在同一个shell中工作。 最佳答案 关闭并重新打开您的tty(即注销并重新打开,这也可能会终止您在进程中的一些后台进程)您只有一个选择:使用gdb附加到有问题的进程,然后运行:pdup2(open("/dev/null",0),1)pdup2(open("/dev/null",0)
在Ruby的popen/spawn中,如何在不使用>2&1的情况下将STDOUT和STDERR合并为一个流?在Python中,这将是:>>>importsubprocess>>>subprocess.check_output('my_progargs',stderr=subprocess.STDOUT,shell=True)注意stderr参数。IuseOpen3-因为我不想要只是stdout-但它已经将它们分成两个流。 最佳答案 使用您的otherquestion中的代码,给你:cmd='a_prog--arg...--arg2.
我有调用ruby脚本和监控STDOUT的Objective-C代码。但是,ruby默认情况下似乎不会同步STDOUT,因此我需要将STDOUT.sync=true放在脚本的开头以查看输出。我可以在调用ruby脚本时将其作为命令行选项执行吗? 最佳答案 您可以创建一个设置文件以在脚本之前要求。然后使用-r标志调用ruby:ruby-r"$HOME/.rubyopts.rb"myscript.rb您还可以设置环境变量RUBYOPT以在每次运行ruby时自动包含该文件:exportRUBYOPT="-r$HOME/.rub
大家好我需要在Windows上从Ruby1.9.2运行一个可能长时间运行的进程,然后从外部进程的标准输出和错误中捕获和解析数据。可以向每个发送大量数据,但我一次只对一行感兴趣(不捕获和存储整个输出)。经过一些研究,我发现Open3class会负责执行流程并给我IO连接到进程的标准输出和错误的对象(通过popen3)。Open3.popen3("external-program.bat")do|stdin,out,err,thread|#Step3.profit()?end但是,我不确定如何在不阻塞程序的情况下连续读取两个流。由于在发送大量数据时在out或err上调用IO#readlin
我想使用Ruby的pp来“打印”到变量而不是STDOUT。这是怎么做到的? 最佳答案 require'pp'result=PP.pp(some_variable,"") 关于ruby-如何漂亮地打印到变量而不是STDOUT?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/14127375/
我想暂时将$stdout和$stderr重定向到将由script/runner运行的脚本中的文件在Rails应用程序中。这样做有任何潜在的副作用吗?在我的脚本运行期间,更改全局变量是否会导致输出流在Rails应用程序的其他部分重定向?脚本使用的其他库或线程呢? 最佳答案 标准输出和标准错误流通常可以通过两种方式访问:$stdout和STDOUT$stderr和STDERR足够聪明的人也可以使用IO.new打开他们自己的副本使用文件描述符参数:sneaky=IO.new(2,'w')现在您可以通过sneaky对标准错误流进行写入访
考虑到我想测试一个长命令的非阻塞读取,我创建了以下脚本,将其保存为long,并使用chmod755使其可执行,并将其放在我的路径中(另存为~/bin/long,其中~/bin在我的路径中)。我在使用RVM默认值编译的ruby1.9.2p290(2011-07-09修订版32553)[x86_64-darwin11.0.0]的*nix变体。我不使用Windows,因此不确定测试脚本是否适合您。#!/usr/bin/envruby3.timesdoSTDOUT.puts'messageonstdout'STDERR.puts'messageonstderr'sleep1end为什么long