我有一个写入标准输出和可能标准错误的程序。我想从python运行它,捕获标准输出和标准错误。我的代码如下:fromsubprocessimport*p=Popen(exe,shell=TRUE,stdout=PIPE,stderr=PIPE)rtrncode=p.wait()对于几个程序,这可以正常工作,但是当我添加一个新程序时,新程序会永远挂起。如果我删除stdout=PIPE,程序会将其输出写入控制台并完成,一切都很好。如何确定导致挂起的原因?在WindowsXP上使用python2.5。该程序不会从标准输入读取数据,也没有任何类型的用户输入(即“按下键”)。
我使用以下方式运行子进程:p=subprocess.Popen("subprocess",stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)此子进程可以在stderr上出现错误时立即退出,或者继续运行。我想检测其中任何一种情况-后者需要等待几秒钟。我试过了:SECONDS_TO_WAIT=10select.select([],[p.stdout,p.stderr],[p.stdout,p.stderr],SECONDS_TO_WAIT)但它只是返回:([],[],[])在任何一种情况下。我能做什么?
是否可以修改下面的代码以从'stdout'和'stderr'打印输出:在终端上打印(实时),最后存储在outs和errs变量中?代码:#!/usr/bin/python3#-*-coding:utf-8-*-importsubprocessdefrun_cmd(command,cwd=None):p=subprocess.Popen(command,cwd=cwd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)outs,errs=p.communicate()rc=p.returncodeouts=outs.deco
我在调用subprocess.Popen时设置环境变量时遇到问题。环境变量似乎没有被设置。有关如何为Python命令行调用正确设置环境变量的任何建议?我的目标是运行一个使用由我的Python代码确定的环境变量的脚本:d=dict(os.environ)d["TEST_VARIABLE"]=str(1234)subprocess.Popen('/usr/bin/mybinary',env=d).wait()但脚本的react就像从未设置过变量一样这是我尝试使用Python的交互式解释器进行的测试:d=dict(os.environ)d["TEST_VARIABLE"]=str(1234)
我正在尝试使用子进程模块和Popen在线程内启动“rsync”。在我调用rsync之后,我还需要读取输出。我正在使用通信方法来读取输出。当我不使用线程时,代码运行良好。看来,当我使用线程时,它会卡在通信调用上。我注意到的另一件事是,当我设置shell=False时,我在线程中运行时不会从通信中得到任何返回。 最佳答案 您没有提供任何代码供我们查看,但这里有一个与您描述的类似的示例:importthreadingimportsubprocessclassMyClass(threading.Thread):def__init__(sel
我正在开发一个漂亮的小功能:defstartProcess(name,path):"""StartsaprocessinthebackgroundandwritesaPIDfilereturnsinteger:pid"""#Checkiftheprocessisalreadyrunningstatus,pid=processStatus(name)ifstatus==RUNNING:raiseAlreadyStartedError(pid)#Startprocessprocess=subprocess.Popen(path+'>/dev/null2>/dev/null&',shell=
非常具体的问题(我希望):以下三个代码有什么区别?(我希望它只是第一个不等待子进程完成,而第二个和第三个会这样做。但我需要确定这是only的区别...)我也欢迎其他评论/建议(尽管我已经很清楚shell=True的危险和跨平台限制)请注意,我已经阅读了Pythonsubprocessinteraction,whydoesmyprocessworkwithPopen.communicate,butnotPopen.stdout.read()?并且我不想/不需要之后与程序交互。另外请注意,我已经阅读了AlternativestoPythonPopen.communicate()memory
我有一些Python代码可以执行外部应用程序,当应用程序的输出量很小时,它可以正常工作,但在输出量很大时会挂起。我的代码如下:p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)errcode=p.wait()retval=p.stdout.read()errmess=p.stderr.read()iferrcode:log.error('cmdfailed:%s'%(errcode,errmess))文档中的注释似乎表明存在潜在问题。等待中,有:Warning:Thiswill
我正在使用Popen调用一个不断将其标准输出和标准错误写入日志文件的shell脚本。有没有办法同时连续输出日志文件(到屏幕上),或者让shell脚本同时写入日志文件和stdout?我基本上想在Python中做这样的事情:catfile2>&1|tee-alogfile#"catfile"willbereplacedwithsomescript同样,这将stderr/stdout一起传送到tee,tee将其同时写入stdout和我的日志文件。我知道如何在Python中将stdout和stderr写入日志文件。我被困的地方是如何将这些复制回屏幕:subprocess.Popen("catf
我需要限制使用subprocess.call从python进程生成的外部命令行应用程序占用的时间和CPU,主要是因为有时生成的进程会卡住并将CPU固定在99%。nice和ulimit似乎是执行此操作的合理方法,但我不确定它们如何与子进程交互。限制类似于:如果进程耗时超过60秒,则终止进程将其限制为CPU的20%我想将资源限制应用于子进程,而不是生成子进程的python进程。有没有办法将nice和ulimit应用于subprocess.call生成的进程?有更好的Python原生替代品吗?这是在linux(ubuntu)系统上。 最佳答案