草庐IT

python - 终止使用 python 子进程 Popen 启动的进程时如何关闭标准输出管道?

我想知道在杀死在不同线程中启动的子进程时是否可以关闭通信管道。如果我不调用communicate(),kill()将按预期工作,在一秒而不是五秒后终止进程。我发现了类似问题的讨论here,但我没有得到真正的答案。我假设我要么必须能够关闭管道,要么明确终止子进程(在示例中为“sleep”)并终止它以解锁管道。我也试图在SO上找到她的答案,但我只找到了this和this和this,据我所知,它并没有直接解决这个问题(?)。所以我想做的是能够在第二个线程中运行一个命令并获得它的所有输出,但能够在我需要时立即终止它。我可以通过一个文件并跟踪那个或类似的文件,但我认为应该有更好的方法来做到这一点

python - 获得所需数据后,如何关闭 Python 2.5.2 Popen 子进程?

我正在运行以下版本的Python:$/usr/bin/envpython--versionPython2.5.2我正在运行以下Python代码,将子进程中的数据写入标准输出,并将其读入名为metadata的Python变量:#Extractmetadata(snippetfromextractMetadata.py)inFileAsGzip="%s.gz"%inFileifos.path.exists(inFileAsGzip):os.remove(inFileAsGzip)os.symlink(inFile,inFileAsGzip)extractMetadataCommand="b

Python - 限制子进程的数据量。Popen 可以产生

我在python中发现了很多询问运行时对象大小的类似问题。一些答案建议对子进程的内存量设置限制。我不想对子进程的内存设置限制。这就是我想要的——我正在使用subprocess.Popen()来执行外部程序。我可以很好地在过程完成后使用process.stdout.readlines()和process.stderr.readlines()获得标准输出和错误。当错误的程序进入无限循环并不断产生输出时,我遇到了问题。由于subprocess.Popen()将输出数据存储在内存中,因此这个无限循环会很快耗尽整个内存,导致程序变慢。一个解决方案是我可以超时运行命令。但是程序需要不同的时间才能完

python - 使用 subprocess.Popen 调用 python 脚本并刷新数据

好吧,我已经看到了很多这样的话题,但没有一个给出完整的答案,到目前为止我尝试过的一切都不适合我。1)不断输出一些数据并刷新它的脚本:importtimeimportsysif__name__=='__main__':foriinrange(5):printi,sys.stdout.flush()time.sleep(1)2)使用Popen调用第一个脚本的脚本,应该一个接一个地打印数字但由于某种原因没有,并且一次打印它们:importsysimportsubprocessif__name__=='__main__':process=subprocess.Popen(['python','

python - 如何为 Popen 的标准输入连接多个文件

我正在将一个bash脚本移植到python2.6,并想替换一些代码:cat$(ls-trxyz_`date+%F`_*.log)|filterargs>bzip2我想我想要类似于http://docs.python.org/release/2.6/library/subprocess.html中的“替换shell管道”示例的东西,阿拉...p1=Popen(["filter","args"],stdin=*?WHAT?*,stdout=PIPE)p2=Popen(["bzip2"],stdin=p1.stdout,stdout=PIPE)output=p2.communicate()[

python - 为什么与多个 Popen 子进程一起使用时会发生通信死锁?

以下问题不会出现在Python2.7.3中。但是,我的机器(64位MacOSX10.7.3)上的Python2.7.1和Python2.6都会出现这种情况。这是我最终会分发的代码,所以我想知道是否有任何方法可以完成这项任务,而不那么依赖于Python版本。我需要并行打开多个子进程并将STDIN数据写入每个子进程。通常我会使用Popen.communicate方法来执行此操作。但是,每当我同时打开多个进程时,communicate就会死锁。importsubprocesscmd=["grep","hello"]processes=[subprocess.Popen(cmd,stdin=s

python - subprocess.Popen 简单代码不允许我执行 cd(更改目录)

我正在尝试使用Python脚本更改目录,但出现错误。python代码:importsubprocessp=subprocess.Popen(['cd','~'],stdout=subprocess.PIPE)output=p.communicate()printoutput我收到这个错误:File"test_sub.py",line2,inp=subprocess.Popen(['cd','~'],stdout=subprocess.PIPE)File"/usr/lib/python2.7/subprocess.py",line710,in__init__errread,errwrit

python - 如何在 python 中将 EOF 写入 STDIN popen

我通过popen运行以下命令:p=subprocess.popen(["/usr/bin/whiptail","--title","\"Progress\"","--gauge","\"\"","6","50","0"],stdout=subprocess.PIPE,stding=subprocess.PIPE)要停止运行whiptail命令,我需要将EOF发送到标准输入。如何在Python中将EOF发送到标准输入?或者我只是调用p.terminate() 最佳答案 您需要关闭用作脚本标准输入的文件。因此在您的情况下是p.stdin

python - Popen 不再适用于 apache/wsgi 和 python 2.7.2?

我的django应用程序曾经使用pythonsubprocess.Popen制作一些shell命令,因为我将ubuntu升级到11.10后不再工作为了简化问题,我将错误的代码放入wsgi脚本中:importosimportsysfromsubprocessimportPopen,PIPEp=Popen(['/usr/bin/id'],stdout=PIPE,stderr=PIPE)comm=p.communicate()printcomm,p.returncodeos.environ['DJANGO_SETTINGS_MODULE']='settings'importdjango.co

Python:subprocess.popen:读取每一行输出

我无法逐行读取我的子进程输出。子进程简单地将一个文件的内容与另一个文件进行对比。输出应该是一个两列文件,可以很好地打印到标准输出。但是当我尝试读取每一行时,它会读取每个字符后跟\n:#!/usr/bin/pythonimportsysimportgetoptimportosimportsubprocessfromsubprocessimportPopen,PIPE,STDOUTinputfile=''target=''try:opts,args=getopt.getopt(sys.argv[1:],"s:t:",['servers=','target='])exceptgetopt.G