Articles of 进程popen

Python 3.4.3 subprocess.Popen得到没有pipe道命令的输出?

我正在尝试将一个命令的输出分配给一个variables,而不是该命令的输出。 其原因在于,如果正在pipe理,正在讨论的命令会将未格式化的文本输出为输出,但如果正在从terminal运行,则会提供彩色格式的文本。 我需要得到这个颜色格式的文本。 到目前为止,我已经尝试了一些东西。 我已经尝试过Popen了: output = subprocess.Popen(command, stdout=subprocess.PIPE) output = output.communicate()[0] output = output.decode() print(output) 这可以让我打印输出,但它给了我input命令时得到的无格式输出。 这是有道理的,因为我在Python代码中将其pipe道化。 但是我很好奇,如果有一种方法可以将这个命令的输出直接分配给一个variables,而不需要运行pipe道本身的pipe道版本。 我也尝试了依赖于check_output的以下版本: output = subprocess.check_output(command) output = output.decode() print(output) 再次,我得到相同的未格式化输出,命令返回时,命令是pipe道。 有没有办法获得格式化的输出,命令通常从terminal给出的输出,当它不被pipe道?

linux命令在C代码上执行

我有下面的代码,我指的是这里的线程使用popen函数 int main(int argc,char *argv[]){ FILE* file = popen("ntpdate", "r"); char buffer[100]; fscanf(file, "%100s", buffer); pclose(file); printf("buffer is :%s\n", buffer); return 0; } 它输出: 21 Apr 03:03:03 ntpdate[4393]: no server can be used, exiting buffer is: 为什么printf不输出任何东西? 如果我使用ls作为命令,那么printf输出ls输出。 我在做什么错误ntpdate执行? 如果我执行下面的代码(指网页 ) #define COMMAND_LEN 8 #define DATA_SIZE 512 int main(int argc,char *argv[]){ FILE *pf; char command[COMMAND_LEN]; […]

文件*和istream:连接两个?

假设我“popen”一个可执行文件,我得到一个FILE*作为回报。 此外,假设我想“连接”这个文件到一个istream对象,以便于处理,有没有办法做到这一点?

LD_PRELOAD即使在unsetenv(“LD_PRELOAD”)之后也会影响新的子项

我的代码如下:preload.c,具有以下内容: #include <stdio.h> #include <stdlib.h> int __attribute__((constructor)) main_init(void) { printf("Unsetting LD_PRELOAD: %x\n",unsetenv("LD_PRELOAD")); FILE *fp = popen("ls", "r"); pclose(fp); } 然后在shell(小心地执行第二个命令!!): gcc preload.c -shared -Wl,-soname,mylib -o mylib.so -fPIC LD_PRELOAD=./mylib.so bash ! 要小心上一个命令,会导致无限循环的分叉“sh -c ls”。 2秒后用^ C停止,(或更好的^ Z,然后看ps)。 更多信息 这个问题在某种程度上与bash有关; 无论是作为用户运行的命令,还是作为popen执行的bash。 额外的关键因素:1)从预加载的库中执行popen,2)可能需要在库的初始化部分做popen。 如果你使用: LD_DEBUG=all LD_DEBUG_OUTPUT=/tmp/ld-debug LD_PRELOAD=./mylib.so bash 而不是最后一个命令,你将会得到许多名为/tmp/ld-debug.*的ld-debug文件。 每个分叉过程一个。 在所有这些文件中,即使LD_PRELOAD已从环境中删除,您仍会看到符号首先在mylib.so中search。

杀死进程打开popen()?

我用popen()打开了一个长期运行的过程。 为了debugging,我想在完成之前终止这个过程。 调用pclose()只是阻塞,直到孩子完成。 我怎样才能杀死这个进程? 我没有看到任何简单的方法从popen()返回的资源中获取pid,以便我可以发送一个信号。 我想我可以做一些kludgey,并尝试使用某种命令行hackery fudge到输出的pid …

通过使用popen()的套接字执行命令

任何人都可以试图实现以下服务器和客户端吗? 服务器: #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> int main(void) { int sock = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serv_addr = { 0 }; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(1234); bind(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); listen(sock, 128); struct sockaddr_in cli_addr = { 0 }; socklen_t cli_addrlen […]

无阻塞pipe道使用popen?

我想打开一个使用popen()的pipe道,并具有非阻塞的“读取”访问权限。 我怎样才能做到这一点? (我发现的例子都是阻塞/同步的)

如何从subprocess.Popen()获取输出

我想从执行Test_Pipe.py输出,我试过在Linux上的代码,但它没有工作。 Test_Pipe.py import time while True : print "Someting …" time.sleep(.1) Caller.py import subprocess as subp import time proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE) while True : data = proc.stdout.readline() #block / wait print data time.sleep(.1) proc.stdout.readline()被封锁,所以没有数据打印出来。

如何在默认程序中启动文件,然后在脚本结束时closures文件?

概要 我有wxPython GUI,它允许用户打开文件来查看。 目前我用os.startfile()做到这一点。 不过,我已经知道这不是最好的方法,所以我正在寻求改进。 startfile()的主要缺点是一旦启动文件,就无法控制文件。 这意味着用户可以将文件保留为打开状态,以便其他用户不可用。 我在找什么 在我的GUI中,可以有孩子的窗户。 我通过将GUI对象存储在列表中来跟踪所有这些,然后当父对象closures时,我只是遍历列表并closures所有的子对象。 我想对用户select的任何文件做同样的事情。 我怎样才能启动一个文件,并保留一个python对象,以便我可以closures它的命令? 提前致谢 我的一个解决scheme的梦想 以这样一种方式启动文件,即可以在函数之间传递一个Python对象 以某种方式在默认程序中启动文件并返回PID 一种用文件名检索PID的方法 目前的进展 这是我打算使用的框架。 重要的位是FileThread类的run()和end()函数,因为这是解决scheme将要去的地方。 import wx from wx.lib.scrolledpanel import ScrolledPanel import threading import os class GUI(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Hey, a GUI!', size=(300,300)) self.panel = ScrolledPanel(parent=self, id=-1) self.panel.SetupScrolling() self.Bind(wx.EVT_CLOSE, self.OnClose) self.openFiles = [] self.openBtn = wx.Button(self.panel, -1, […]

在Windows中使用子程序Popen.send_signal(CTRL_C_EVENT)时如何实现预期的结果?

在Windows 2.7的Python文档中,您可以发送一个CTRL_C_EVENT (Python 2.7subprocessPopen.send_signal文档)。 但是,当我尝试它,我没有收到预期的subprocess中的键盘中断。 这是父进程的示例代码: # FILE : parentProcess.py import subprocess import time import signal CREATE_NEW_PROCESS_GROUP = 512 process = subprocess.Popen(['python', '-u', 'childProcess.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, creationflags=CREATE_NEW_PROCESS_GROUP) print "pid = ", process.pid index = 0 maxLoops = 15 while index < maxLoops: index += 1 # Send one message every 0.5 seconds time.sleep(0.5) […]