在处理打开的文件时,Python使用with语法确保文件在离开block时关闭-无论异常等如何。withopen('foo.txt')asf:foo=f.read()由于进程也是资源,我想知道:在使用Popen时是否可能或推荐使用类似的东西?例如,应该Popen.kill();Popen.communicate()在finally子句中运行-假设我不介意在进程完成之前阻塞? 最佳答案 从Python3.2开始,Popen是一个上下文管理器。来自docs:Popenobjectsaresupportedascontextmanager
我正在尝试从另一个Python脚本运行一个Python脚本,并获取它的pid以便稍后可以终止它。我尝试使用参数shell=True'的subprocess.Popen(),但是pid属性返回父脚本的pid`,因此当我尝试终止子进程时,它会终止父进程。这是我的代码:proc=subprocess.Popen("python./script.py",shell=True)pid_=proc.pid...#laterinmycodeos.system('kill-9%s'%pid_)#ITKILLSTHEPARENT:( 最佳答案 she
我在使用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似乎没