草庐IT

ruby - 如何等待进程完成使用 IO.popen?

我在Ruby中使用IO.popen循环运行一系列命令行命令。然后我需要在循环外运行另一个命令。在循环中的所有命令都终止之前,循环外的命令无法运行。如何让程序等待这种情况发生?目前最终命令运行得太快了。一个例子:forfooinbarIO.popen(cmd_foo)endIO.popen(another_cmd)所以所有的cmd_foos都需要在another_cmd运行之前返回。 最佳答案 显然是canonicalway这样做是:Process.wait(popened_io.pid)

php - 通过 websockets 发送 popen 的输出

我使用带fgets的popen异步读取tcpdump的输出。以下代码应在命令行中运行,而不是使用apache并在浏览器中查看。$handle=popen('tcpdump-nnX','r');while(true){$output=fgets($handle);print$output."\n";}当我尝试通过websockets输出此信息时出现问题。Websockets还使用无限循环(用于管理其套接字、滴答和消息)。它看起来像:while(true){@socket_select($read,$write,$except,1);foreach($readas$socket){if($

Python subprocess.Popen 错误,OSError : [Errno 12] Cannot allocate memory after period of time

注意:此问题已被重新提出,并提供了所有调试尝试的摘要here.我有一个Python脚本作为后台进程运行,每60秒执行一次。其中一部分是调用subprocess.Popen得到ps的输出.ps=subprocess.Popen(['ps','aux'],stdout=subprocess.PIPE).communicate()[0]运行几天后,调用出错:File"/home/admin/sd-agent/checks.py",line436,ingetProcessesFile"/usr/lib/python2.4/subprocess.py",line533,in__init__Fil

python - 在线程中使用 Popen 会阻塞每个传入的 Flask-SocketIO 请求

我有以下情况:我在socketio服务器上收到一个请求。我回答它(socket.emit(..)),然后然后在另一个线程中开始计算负载繁重的东西。如果繁重的计算是由subprocess.Popen(使用subprocess.PIPE)引起的,只要它正在执行,它就会完全阻止每个传入的请求,尽管它发生在一个单独的线程。没问题-在thisthread建议异步读取缓冲区大小为1的子进程的结果,以便在这些读取之间其他线程有机会做某事。不幸的是,这对我没有帮助。我也已经monkeypatchedeventlet并且工作正常-只要我不在线程中使用subprocess.Popen和subprocess

python - 在没有控制台的情况下使用 Popen 在 python 中运行进程

我有一个带有GUI的程序,它通过Popen调用运行外部程序:p=subprocess.Popen("",stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd=os.getcwd())p.communicate()但是无论我做什么,都会弹出一个控制台(我也尝试将它传递给NUL作为文件句柄)。有没有办法在不获取我调用的二进制文件来释放其控制台的情况下做到这一点? 最佳答案 来自here:importsubprocessdeflaunchWithoutConsole(command,args)

python - 如何从 subprocess.Popen.stdout 读取所有可用数据(非阻塞)?

我需要一种方法来读取Popen创建的流中所有当前可用的字符,或者找出缓冲区中剩余的字符数。背景:我想用Python远程控制一个交互式应用程序。到目前为止,我使用Popen创建了一个新的子进程:process=subprocess.Popen(["python"],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd=workingDir)(我不是真的开始python,但实际的交互界面是相似的。)目前我读取了1个字节,直到我检测到进程已到达命令提示符:output=""whil

python - subprocess.Popen() 错误(没有这样的文件或目录)调用带有参数作为字符串的命令

我正在尝试使用Python函数计算文件中的行数。在当前目录中,当os.system("ls")找到文件时,命令subprocess.Popen(["wc-lfilename"],stdout=subprocess.PIPE)不起作用。这是我的代码:>>>importos>>>importsubprocess>>>os.system("ls")sorted_list.dat0>>>p=subprocess.Popen(["wc-lsorted_list.dat"],stdout=subprocess.PIPE)File"",line1,inFile"/Users/a200/anacond

python - 使用 Popen.stdin 执行多个命令

我想使用管道在从python脚本启动的独立应用程序中执行多个命令。我可以可靠地将命令传递给程序的标准输入的唯一方法是使用Popen.communicate但它会在命令执行后关闭程序。如果我使用Popen.stdin.write比命令只执行5次左右的1次,它就不能可靠地工作。我做错了什么?稍微详细一点:我有一个应用程序,它监听标准输入的命令并逐行执行它们。我希望能够运行应用程序并将各种命令传递给它,基于用户与GUI的交互。这是一个简单的测试示例:importos,stringfromsubprocessimportPopen,PIPEcommand="anApplication"proc

python - Python Popen.communicate() 内存限制的替代方案?

我有以下Python代码块(运行v2.7),当我处理大型(几GB)文件时,会引发MemoryError异常:myProcess=Popen(myCmd,shell=True,stdout=PIPE,stderr=PIPE)myStdout,myStderr=myProcess.communicate()sys.stdout.write(myStdout)ifmyStderr:sys.stderr.write(myStderr)在阅读documentationtoPopen.communicate(),似乎正在进行一些缓冲:NoteThedatareadisbufferedinmemor

python - 将标准输出从 subprocess.Popen 保存到文件,并将更多内容写入文件

我正在编写一个python脚本,它使用subprocess.Popen来执行两个程序(来自已编译的C代码),每个程序都会产生标准输出。该脚本获取该输出并将其保存到文件中。因为输出有时大到足以压倒subprocess.PIPE,导致脚本挂起,所以我将stdout直接发送到日志文件。我想让我的脚本在文件的开头和结尾以及两个subprocess.Popen调用之间写一些东西。但是,当我查看日志文件时,我从脚本写入日志文件的所有内容都放在文件的顶部,然后是所有可执行的标准输出。如何将添加的文本交错到文件中?defrun(cmd,logfile):p=subprocess.Popen(cmd,s