草庐IT

subprocesses

全部标签

python - subprocess.call 不等待进程完成

根据Python文档,subprocess.call应该阻塞并等待子进程完成。在此代码中,我试图通过在命令行上调用Libreoffice将一些xls文件转换为新格式。我假设对subprocess调用的调用是阻塞的,但似乎我需要在每次调用后添加一个人为延迟,否则我会错过out目录中的几个文件。我做错了什么?为什么我需要延迟?fromsubprocessimportcallforiinrange(0,len(sorted_files)):args=['libreoffice','-headless','-convert-to','xls',"%s/%s.xls"%(sorted_files

python - 如何获取 subprocess.check_output() python 模块的输出?

我正在尝试使用python中的命令提示符(CMD-Windows)获取信息,使用这样的模块子进程:ipconfig=subprocess.check_output("ipconfig")print(ipconfig)结果是:b'\r\nWindowsIPConfiguration\r\n\r\n\r\nEthernetadapterLocalAreaConnect:\r\n\r\nConnection-specificDNSSuffix.:XX.XXX\r\nIPv4address...........:XXXXXXXXX\r\nSubnetMask...........:XXXXXX

python - 从 subprocess.Popen 异步读取标准输出

我正在使用subprocess.popen运行一个子程序。当我从命令窗口(cmd.exe)启动我的Python程序时,程序会随着程序的发展在窗口中写入一些信息和日期。当我在命令窗口中不运行我的Python代码时,它会为这个子程序的输出打开一个新的命令窗口,我想避免这种情况。当我使用下面的代码时,它没有显示cmd窗口,但也没有打印状态:p=subprocess.Popen("c:/flow/flow.exe",shell=True,stdout=subprocess.PIPE)printp.stdout.read()如何在程序输出中显示子程序的输出? 最佳答案

python - subprocess.popen 的 poll 方法对于长进程返回 None

我正在通过子进程执行curl命令。此curl命令在另一台服务器上启动视频处理,并等待响应。该过程完成后,远程服务器返回json对象。我正在使用poll()值检查子进程的状态,该值是None-进程未完成,0-进程成功完成,1-表示错误。如果远程服务器上的处理时间大约为30分钟或更少,我将得到正确的响应,但如果处理时间更长,我将只得到None值,即使我可以看到远程服务器已完成处理并已返回json对象。谁能告诉我,poll()在特定时间后仅返回None的可能原因是什么。提前谢谢你。我的Popen对象是:object=subprocess.Popen(str(curlCmd),shell=Tr

python - 为什么向 subprocess.Popen 提供标准输入会导致写入标准输出的内容发生变化?

我正在使用Python的subprocess.Popen使用主机操作系统的二进制客户端执行一些FTP。由于各种原因,我无法使用ftplib或任何其他库。如果我将标准输入处理程序附加到Popen实例,二进制文件的行为似乎会发生变化。例如,使用XP的ftp客户端,它接受要发出的命令的文本文件:>>>fromsubprocessimportPopen,PIPE>>>p=Popen(['ftp','-A','-s:commands.txt','example.com'],stdout=PIPE)>>>p.communicate()[0]'Connectedtoexample.com.220Pr

带有 shell=True : redirections and platform-independent subprocess killing 的 python 子进程

我很难从python子进程模块中得到我想要的东西(它应该是一个统一/独立于平台的抽象,afaik,但不要让我开始这样做:))。所以我所追求的简单的事情如下。我要启动一个外部(stdio)应用程序(可能带有子进程),我在其中使用shell样式的重定向(例如'./myapp>stdout_log>stderr_log')基本上我想执行shell命令行,所以我必须为subprocess.Popen()指定shell=True(否则命令行中的重定向将不起作用)我想以异步方式启动此命令行(因此它作为独立的子进程运行,但我的python进程不会等待它完成)(我的父python进程会不时查看子进程的

python - 使用Python的subprocess.Popen时的异常处理

在处理打开的文件时,Python使用with语法确保文件在离开block时关闭-无论异常等如何。withopen('foo.txt')asf:foo=f.read()由于进程也是资源,我想知道:在使用Popen时是否可能或推荐使用类似的东西?例如,应该Popen.kill();Popen.communicate()在finally子句中运行-假设我不介意在进程完成之前阻塞? 最佳答案 从Python3.2开始,Popen是一个上下文管理器。来自docs:Popenobjectsaresupportedascontextmanager

python - subprocess.Popen().pid 返回父脚本的 pid

我正在尝试从另一个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.call logger 信息和 stdout 和 stderr 的错误分别

我有一个记录器。像这样:importlogginglogger=logging.getLogger('myApp')hdlr=logging.FileHandler('myApp.log')logger.addHandler(hdlr)logger.setLevel(logging.INFO)我正在这样调用一个外部进程:subprocess.call("someCommand")我想从该进程中单独捕获stdout和stderr,以便我可以相应地记录它们。例如logger.info()logger.error()我看到了多种在一个流中捕获所有子流程的方法。但是,如果存在实际错误,我想将其

python - 为什么 subprocess.Popen 不等到子进程终止?

我在使用Python的subprocess.Popen方法时遇到问题。这是一个演示问题的测试脚本。它在Linux机器上运行。#!/usr/bin/envpythonimportsubprocessimporttimedefrun(cmd):p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)returnp###STARTMAIN#copysomerowsfromasourcetabletoadestinationtable#notethatthedestinationtableisemptywhenthisscriptisr