草庐IT

python - 如何将字符串传递给 subprocess.Popen(使用 stdin 参数)?

如果我执行以下操作:importsubprocessfromcStringIOimportStringIOsubprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]我明白了:Traceback(mostrecentcalllast):File"",line1,in?File"/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py"

python - 将 subprocess.Popen 调用的输出存储在字符串中

这个问题在这里已经有了答案:Runningshellcommandandcapturingtheoutput(21个回答)关闭去年。我正在尝试在Python中进行系统调用并将输出存储到我可以在Python程序中操作的字符串中。#!/usr/bin/pythonimportsubprocessp2=subprocess.Popen("ntpq-p")我已经尝试了一些方法,包括这里的一些建议:Retrievingtheoutputofsubprocess.call()但没有任何运气。 最佳答案 在Python2.7或Python3中您可

Ruby popen 和可执行路径?

当执行IO.popen或exec时,Ruby从哪里获取默认的PATH变量?例如在zsh中:echo$PATH/Users/bibstha/.rubies/ruby-2.1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin在irb中向ENV['PATH']确认:irb(main):026:0>ENV['PATH']=>"/Users/bibstha/.rubies/ruby-2.1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"但不是popen:irb(main):024:0>IO

python - 打印出 os.popen() 的输出而不在 python 中缓冲

假设我有一个进程可以打印出一些数据,例如这个ruby​​代码。1.upto(10){|i|putsiputs"\n"sleep0.6}我想要一个python代码来生成这个过程,并从中读取数据以打印出来。importosimportsyscmd="ruby/Users/smcho/Desktop/testit.rb";pingaling=os.popen(cmd,"r")while1:line=pingaling.readline()ifnotline:breakprintline,sys.stdout.flush()pingaling.close()这段代码的问题是它没有一个一个地打印

ruby - 如何使用 Ruby 和 IO.popen 写入和读取进程?

我写了这个,但是没有用...output=IO.popen("irb","r+")do|pipe|pipe.getspipe.puts"10**6"pipe.getspipe.puts"quit"end我这样重写IO.popen("irb","w+")do|pipe|3.times{putspipe.gets}#startupnoisepipe.puts"10**6\n"putspipe.gets#Iexpect"=>1000000"pipe.puts"quit"#Iexpectexitfromirbend但它也没有用 最佳答案 要

ruby - 在 Popen 中合并 stdout 和 stderr

在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 - 为什么 Open3.popen3 在缺少可执行文件时返回错误错误?

我正在围绕CLI制作一个Ruby包装器。我找到了一个简洁的方法,Open3.capture3(内部使用Open3.popen3),它让我可以执行命令并捕获stdout、stderr和退出代码。我想检测的一件事是是否找不到CLI可执行文件(并为此引发一个特殊错误)。我知道当找不到命令时,UNIXshell会给出退出代码127。当我在bash中执行$foo时,我得到-bash:foo:commandnotfound,这正是我想要显示的错误消息。考虑到所有这些,我编写了如下代码:require"open3"stdout,stderr,status=Open3.capture3(command

ruby - Runy Open3.popen3 从命令行输入子进程

目标:我正在用ruby​​编写一个工作流命令行程序,它在UNIXshell上顺序执行其他程序,其中一些程序需要用户输入。问题虽然我可以成功处理stdout和stderr多亏了这个有用的blogpost通过NickCharlton,但是我坚持捕获用户输入并通过命令行将其传递给子进程。代码如下:方法moduleCMDdefrun(cmd,&block)Open3.popen3(cmd)do|stdin,stdout,stderr,thread|Thread.newdo#STDOUTuntil(line=stdout.gets).nil?doyieldnil,line,nil,threadi

Ruby IO.popen STDOUT 缓冲

我正在编写一个脚本,该脚本使用IO.popen打开另一个程序并持续读取数据。是这样的:process=IO.popen(["/the/program","argument","argument"])loopdoline=process.getsputs"#{line}"end(实际的程序不仅仅是打印输出,显然-这只是一个例子。)我遇到的问题是popen似乎在缓冲来自已打开进程的STDOUT。我已经通过直接从shell并通过popen并排运行程序来确认这一点,而Ruby永远不会一次获得一行。它总是一次获取多行,并且有延迟。我试过了STDOUT.sync=true...在popen之前,但

python - 如何为 popen 指定工作目录

有没有办法在Python的subprocess.Popen()中指定命令的运行目录?例如:Popen('c:\mytool\tool.exe',workingdir='d:\test\local')我的Python脚本位于C:\programs\python是否可以在D:\test\local目录下运行C:\mytool\tool.exe?如何设置子进程的工作目录? 最佳答案 subprocess.Popentakesacwdargument设置当前工作目录;您还需要转义反斜杠('d:\\test\\local'),或使用r'd:\