jjzjj

Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令输出?

我正在尝试将命令的输出分配给变量,而命令认为它正在被管道传输。这样做的原因是,所讨论的命令在通过管道传输时会提供未格式化的文本作为输出,但在从终端运行时会提供彩色格式化文本。我需要获取这种颜色格式的文本。到目前为止,我已经尝试了一些事情。我试过Popen是这样的:output=subprocess.Popen(command,stdout=subprocess.PIPE)output=output.communicate()[0]output=output.decode()print(output)这将让我打印输出,但它会给我在管道命令时获得的未格式化输出。这是有道理的,因为我在Pyt

C: 由 popen() 函数执行的 Linux 命令不显示结果

我有下面的代码,我引用了here上的线程使用popen函数intmain(intargc,char*argv[]){FILE*file=popen("ntpdate","r");charbuffer[100];fscanf(file,"%100s",buffer);pclose(file);printf("bufferis:%s\n",buffer);return0;}输出:21Apr03:03:03ntpdate[4393]:noservercanbeused,exitingbufferis:为什么printf不输出任何东西?如果我使用ls作为命令,则printf输出ls输出。我在做

c - 为什么 popen() 调用 shell 来执行进程?

我目前正在阅读并试验在Linux上从C代码中运行程序的不同可能性。我的用例涵盖了所有可能的场景,从简单地运行和忘记进程,读取或写入进程,到读取并写入它。对于前两个,popen()非常易于使用并且运行良好。我知道它在内部使用了某些版本的fork()和exec(),然后调用一个shell来实际运行命令。对于第三种情况,popen()不是一个选项,因为它是单向的。可用的选项是:手动fork()和exec(),加上pipe()和dup2()作为输入/输出posix_spawn(),内部根据需要使用上面的方法我注意到这些可以实现与popen()相同的效果,但我们可以完全避免调用额外的sh。这听起

python - 为什么 subprocess.Popen 参数长度限制小于操作系统报告的长度?

我在Linux3.16.0上运行Python3.4.3。我想使用subprocess.Popen运行一个带有长单个参数的命令(一个复杂的Bash调用),大约200KiB。根据getconf和xargs,这应该在我的限制范围内:$getconfARG_MAX2097152$xargs--show-limits然而,Python失败的限制非常小:>>>subprocess.Popen('echo%s>/dev/null'%('a'*(131072-4096)),shell=True,executable='/bin/bash')>>>subprocess.Popen('echo%s>/de

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