草庐IT

python - 使用 popen 和专用的 TTY Python 运行交互式 Bash

我需要在Python的单独进程中运行一个交互式Bash实例,它有自己的专用TTY(我不能使用pexpect)。我使用了我在类似程序中经常看到的这段代码片段:master,slave=pty.openpty()p=subprocess.Popen(["/bin/bash","-i"],stdin=slave,stdout=slave,stderr=slave)os.close(slave)x=os.read(master,1026)printxsubprocess.Popen.kill(p)os.close(master)但是当我运行它时,我得到以下输出:$./pty_try.pybas

c - 使用popen的非阻塞管道?

我想使用popen()打开管道并对其进行非阻塞“读取”访问。我怎样才能做到这一点?(我找的例子都是阻塞/同步的) 最佳答案 设置如下:FILE*f=popen("./output","r");intd=fileno(f);fcntl(d,F_SETFL,O_NONBLOCK);现在你可以阅读:ssize_tr=read(d,buf,count);if(r==-1&&errno==EAGAIN)nodatayetelseif(r>0)receiveddataelsepipeclosed完成后,清理:pclose(f);

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