草庐IT

python - subprocess.Popen.stdout - 实时读取标准输出(再次)

同样的问题。原因是-阅读以下内容后我仍然无法使其工作:Real-timeinterceptingofstdoutfromanotherprocessinPythonInterceptingstdoutofasubprocesswhileitisrunningHowdoIget'real-time'informationbackfromasubprocess.Popeninpython(2.5)catchingstdoutinrealtimefromsubprocess我的情况是我有一个用C编写的控制台应用程序,让我们以循环中的这段代码为例:tmp=0.0;printf("\ninput

python - 子进程 Popen 不适用于 pythonw.exe

当我使用pythonw.exe在Windows上运行以下脚本时,我希望能够获取stdout和stderr的内容:importsubprocessimportsysimportosimportstringimporttimetmpdir='c:/temp'cmd='dirc:'tmpfile="tmp_%f"%(time.time())tmpfile=os.path.normpath(os.path.join(tmpdir,tmpfile))tmpfile2=tmpfile+".bat"tmpfile3=tmpfile+".txt"fa=open(tmpfile2,'w')fa.writ

python - 在 C 或 Python 中使用 popen 绕过子进程输出的缓冲

我有一个关于popen(以及所有相关函数)的一般性问题,适用于所有操作系统,当我编写python脚本或一些c代码并从控制台(win或linux)运行生成的可执行文件时,我可以立即查看过程的输出。但是,如果我运行与fork进程相同的可执行文件,并将其标准输出重定向到管道中,则输出会在某处缓冲,通常最多4096字节,然后写入父进程可以读取的管道。以下python脚本将以1024字节的block生成输出importos,sys,timeif__name__=="__main__":dye='@'*1024foriinrange(0,8):printdyetime.sleep(1)下面的pyt

python - Windows 上使用 Python 和 subprocess.Popen() 的 Unicode 文件名

为什么会出现以下情况:>>>u'\u0308'.encode('mbcs')#UMLAUT'\xa8'>>>u'\u041A'.encode('mbcs')#CYRILLICCAPITALLETTERKA'?'>>>我有一个Python应用程序接受来自操作系统的文件名。它适用于某些国际用户,但不适用于其他用户。例如,这个unicode文件名:你'\u041a\u0433\u044b\u044b\u0448\u0444\u0442'不会使用Windows的“mbcs”编码(文件系统使用的编码,由sys.getfilesystemencoding()返回)进行编码。我得到“????????

python - Subprocess.call 或 Subprocess.Popen 不能使用 PATH (Linux/Windows) 中的可执行文件

我正在编写一个需要在Linux和Windows上运行并使用路径中存在的可执行文件(带参数)的程序。(假设)目前,我在使用Subprocess.Call和Subprocess.Popen在Windows中运行可执行文件时遇到问题。对于像这样的代码,在windows8中defmakeBlastDB(inFile,inputType,dbType,title,outDir):strProg='makeblastdb'strInput='-in'+inFilestrInputType='-input_type'+inputTypestrDBType='-dbtype'+dbTypestrTit

python - 如何使使用 call/Popen 调用的子进程继承环境变量

首先,很抱歉,我确信我对bash、shell和子进程的初步理解是显而易见的。我正在尝试使用Python自动调用一个名为Freesurfer的程序(实际上,我正在调用的子程序称为recon-all。)如果我直接在命令行执行此操作,我会“获取”一个名为mySetUpFreeSurfer.sh的脚本,该脚本除了设置三个环境变量外什么都不做,然后“获取”另一个脚本FreeSurferEnv.sh。FreesurferEnv.sh在我看来除了设置很多环境变量并向终端回显一些内容外什么也没做,但它比其他bash脚本更复杂,所以我不确定。这是我现在拥有的:fromsubprocessimportPo

python - 用 Popen 模仿 glib.spawn 异步...

函数glib.spawn_async允许您Hook三个回调,它们在stdout、stderr和进程完成时调用。如何使用subprocess模拟相同的功能?使用线程还是异步?我对功能而不是线程/asynio更感兴趣,但包含这两者的答案将获得赏金。这是一个显示我想做什么的玩具程序:importglibimportloggingimportosimportgtkclassMySpawn(object):def__init__(self):self._logger=logging.getLogger(self.__class__.__name__)defexecute(self,cmd,on_

python - args 参数的 subprocess.Popen 最大长度是多少?

我正在使用Popen从subprocess模块执行命令行工具的功能:subprocess.Popen(args,bufsize=0,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=False,shell=False,cwd=None,env=None,universal_newlines=False,startupinfo=None,creationflags=0)我使用的工具获取一个文件列表,然后进行处理。在某些情况下,此文件列表可能会很长。有没有办法找到args参数的最大长度?

python - subprocess.call() 和 subprocess.Popen() 之间有什么区别使前者的 PIPE 安全性降低?

我已经查看了它们的文档。这个问题是由J.F.在这里的评论提示的:Retrievingtheoutputofsubprocess.call()subprocess.call()的当前Python文档说明以下关于将PIPE用于subprocess.call()的内容:NoteDonotusestdout=PIPEorstderr=PIPEwiththisfunction.ThechildprocesswillblockifitgeneratesenoughoutputtoapipetofilluptheOSpipebufferasthepipesarenotbeingreadfrom.Py

python - 使用 subprocess.Popen 时将大量数据通过管道传输到标准输入

我有点难以理解解决这个简单问题的python方法是什么。我的问题很简单。如果您使用以下代码,它将挂起。这在子流程模块文档中有详细记录。importsubprocessproc=subprocess.Popen(['cat','-'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,)foriinrange(100000):proc.stdin.write('%d\n'%i)output=proc.communicate()[0]printoutput搜索解决方案(有一个非常有见地的线程,但我现在已经丢失了)我找到了这个使用显式fork的解决方案