我在使用Python的subprocess.Popen方法时遇到问题。这是一个演示问题的测试脚本。它在Linux机器上运行。#!/usr/bin/envpythonimportsubprocessimporttimedefrun(cmd):p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)returnp###STARTMAIN#copysomerowsfromasourcetabletoadestinationtable#notethatthedestinationtableisemptywhenthisscriptisr
我有如下结构:os.mkfifo('pipe.tmp')enc=Popen(['encoder','-i','pipe.tmp'])cap=Popen(['capture','-f','pipe.tmp'])这里cap是一个通常写入文件的进程(由-f指定),但我可以通过提供让它将数据喷到屏幕上>/dev/stdout作为输出文件。类似地,enc期望从类似文件的对象中读取,并且我能够通过提供-作为输入来让它从管道中读取。所以我认为可能不需要特殊文件而不是在操作系统中使用命名管道,我可以使用这样的未命名管道..cap=Popen(['capture','-f','/dev/stdout']
我正在编写一个用于工作流管理器的包装器类。我想以某种方式记录应用程序(通过subprocess.Popen执行的子进程)的输出:child的stdout应该转到日志文件和父级的stdout,child的stderr应该转到不同的日志文件,但也应该转到父级的stdout。即child的所有输出最终都应该合并到stdout上(就像subprocess.Popen(...,stderr=subprocess.STDOUT)一样,所以我可以保留stderr用于包装器本身的日志消息。另一方面,child的流应该转到不同的文件以允许单独验证。我已经尝试使用“Tee”辅助类将两个流(stdout和日
有很多类似的帖子,但我没有找到答案。在Gnu/Linux上,使用Python和subprocess模块,我使用以下代码迭代使用子进程启动的命令的stdout/sdterr:classShell:"""runacommandanditerateoverthestdout/stderrlines"""def__init__(self):passdef__call__(self,args,cwd='./'):p=subprocess.Popen(args,cwd=cwd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,)whileTrue:li
我正在使用nose测试使用subprocess.Popen()调用脚本的应用程序。capture都不是或logcapture插件似乎捕获了这个脚本的输出。有没有一种简单的方法可以将此输出通过管道传输到Nose?这是我到目前为止所做的尝试;请注意“捕获我”未被捕获:example.py:if__name__=='__main__':print'Captureme'测试.py:importsubprocessimportsysdeftest_popen():#nose'scapturepluginreplacessys.stdoutwithaStringIOinstance.#subpro
我有一个要打开的unicode文件名。以下代码:cmd=u'cmd/c"C:\\Pok\xe9mon.mp3"'cmd=cmd.encode('utf-8')subprocess.Popen(cmd)返回>>>'C:\Pokיmon.mp3'isnotrecognizedasaninternalorexternalcommand,operableprogramorbatchfile.即使文件确实存在。为什么会这样? 最佳答案 看起来您使用的是Windows和Python2.X。使用os.startfile:>>>importos>>
在线documentation声明os.popen现已弃用。所有其他弃用的函数都会适本地引发DeprecationWarning。例如:>>>importos>>>[c.close()forcinos.popen2('psh-eopid:1,command')]__main__:1:DeprecationWarning:os.popen2isdeprecated.Usethesubprocessmodule.[None,None]另一方面,函数os.popen静默完成:>>>len(list(os.popen('psh-eopid:1,command')))202不发出警告。三种可能的
我想使用相当于在perl中通过管道传输一些shell命令的python。类似于open(PIPE,"command|")的python版本。我转到子流程模块并试试这个:p=subprocess.Popen("zgrepthingiwantlargefile",shell=True,stdout=subprocess.PIPE)这可以像在perl中一样读取输出,但它不会自行清理。当我退出解释器时,我得到grep:writingoutput:Brokenpipe在stderr上喷了几百万次。我想我曾天真地希望这一切都会为我照顾好,但事实并非如此。在p上调用terminate或kill似乎没
有没有一种方法可以终止使用subprocess.Popen类启动且“shell”参数设置为“True”的进程?在下面的最小工作示例(使用wxPython)中,您可以愉快地打开和终止记事本进程,但是如果您将Popen“shell”参数更改为“True”,则记事本进程不会终止。importwximportthreadingimportsubprocessclassMainWindow(wx.Frame):def__init__(self,parent,id,title):wx.Frame.__init__(self,parent,id,title)self.main_panel=wx.Pa
我使用popen在Python脚本中执行命令,并通过cron调用它。Cron会调用此脚本,但如果我手动调用它,行为会有所不同。来源:fromsubprocessimportPopen,PIPEpp=Popen('/usr/bin/whichiptables',shell=True,stdout=PIPE)data=''forlninpp.stdout:data=data+lnifdata=='':print'ko'else:print'ok:'+data手动:#python/home/user/test.py>:/sbin/iptables通过cron(在/tmp/err_cron中)