本篇文章给大家谈谈Python子进程子进程调用填充指南,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
import subprocesscmd=[‘ls’]process=subprocess.Popen(cmd, stdout=subprocess.PIPE)for stdout_line in iter(process.stdout.readline, b”): print(stdout_line)process.stdout.close( )return_code=process.wait()if return_code: raise subprocess.CalledProcessError(return_code, cmd)
shell=True
但是在Windows平台上运行dir命令时,报错:FileNotFoundError: [WinError 2] 系统找不到指定的文件。
解决办法是添加shell=True参数。
原因是:dir不是一个单独的命令,它是CMD(Windows shell)的内置程序,所以添加shell=True参数。
注意:shell=True 仅应在绝对必要时使用。
导入subprocesscmd=[‘dir’]process=subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)for stdout_line in iter(process.stdout.readline, b”): print(stdout_line) 010- 1010 有时,当发现正在运行的子进程时,上面的代码不会立即打印输出,而是需要等待几秒钟。
原因是:子进程运行的程序没有刷新stdout。比如C语言中的printf,当不立即flush时,打印的输出其实是在缓冲区中的,要等到缓冲区满了才集体输出一次。
解决方案:
子进程的运行方式是Python。比较简单。只需添加os.environ[‘PYTHONUNBUFFERED’]=’1’。如果是在Linux平台上运行一般程序,只需添加cmd=[‘stdbuf’, ‘-oL’] + cmd即可。
实时读取子进程输出
通过env=参数。
注意:不能只传递我们要添加的环境变量(如LD_LIBRARY_PATH)。子进程默认使用父进程的很多环境变量,所以先复制父进程的环境变量,然后添加我们需要的。
my_env=os.environ.copy()my_env[‘LD_LIBRARY_PATH’]=’./libs/x64/’cmd=[‘command’]popen=subprocess.Popen(cmd, stdout=subprocess.PIPE, env=my_env )
如何为子进程添加环境变量
有时,我们的子进程需要在特定目录中运行。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/127237.html
用户评论
爱情的过失
终于找到这篇文章了!之前用Python子进程 subprocess 经常出现莫名其妙的错误,看了这篇指南之后感觉豁然开朗,很多踩过的坑都能避免了!
有6位网友表示赞同!
屌国女农
写的很好理解,即使不太熟悉subprocess用法也能看懂。感谢作者分享这么实用的经验和技巧,可以节省我好多时间!
有12位网友表示赞同!
你是梦遥不可及
文章内容比较全面,涵盖了我平时遇到的大部分问题。不过对于一些进阶的使用场景,比如自定义环境变量或者信号处理,希望作者能再补充一些细节,会更完善。
有20位网友表示赞同!
陌上花
subprocess真是一件可怕的东西,每次使用都像是在和它博弈一样。这篇指南真是太及时了,让我对它的使用方法有了更深入的理解,现在终于可以轻松应对各种场景需求了!
有17位网友表示赞同!
虚伪了的真心
我觉得很多地方可以说得更详细一点,比如对一些复杂错误的处理方式,或者如何进行调试和排查。毕竟subprocess的用法确实比较棘手,需要更多实际案例来加深理解。
有6位网友表示赞同!
■□丶一切都无所谓
我一直觉得Python自带的库都挺好用的,但是subprocess这块的确比较难上手。感谢作者分享这种宝贵的资源!以后遇到问题可以直接参考这篇指南,省得折腾半天还弄不明白原因。
有16位网友表示赞同!
不识爱人心
文章写的很好,重点突出,容易理解。对于新手来说,这篇指南能提供一个很好的入门基础,也能帮助避免一些常见的问题。当然,高手读者可能觉得有些内容过于简单。
有15位网友表示赞同!
百合的盛世恋
看完这条指南之后才明白之前为什么每次写subprocess代码都感觉那么累赘和复杂!原来有些步骤是可以简化和优化的!希望作者可以继续更新更多实用技巧和经验分享
有12位网友表示赞同!
刺心爱人i
python子进程这东西确实挺难用,尤其是对于一些特定场景下的操作,容易出现各种问题。这篇指南介绍的很详细,对我的学习很有帮助!
有16位网友表示赞同!
红尘滚滚
对于我这种喜欢研究底层技术的程序员来说,这个指南还算实用。可惜了一些更深入的细节和调试技巧,如果有机会可以再补充一下会更好。
有5位网友表示赞同!
怪咖
终于找到一篇解决subprocess常见问题的文章了!希望作者能继续更新更多内容,比如不同操作系统下使用的一些特殊之处,或者如何应对一些异常情况等等。
有17位网友表示赞同!
君临臣
作为一名Python新手,我很感谢作者写这篇指南。通过阅读,我明白了子进程的用法及其局限性,也能更加清晰地识别问题并寻找解决方案。希望以后还能看到作者分享更多相关内容!
有15位网友表示赞同!
肆忌
文章结构清晰,语言简洁易懂,非常适合入门学习者参考。但是对于一些更复杂的场景,例如跨进程通信或数据共享,本文没有详细介绍,我希望后续能够补充这些内容。
有16位网友表示赞同!
晨与橙与城
之前对subprocess一直比较陌生,通过这篇指南我了解到它有很多可以利用的强大功能,比如管道和错误重定向等。作者解释得很详细,很容易理解。感谢分享!”
有19位网友表示赞同!
*巴黎铁塔
文章写的太好了!以前总是觉得subprocess复杂难懂,现在看了指南就豁然开朗了!非常感谢作者,这种实用的教程才是真正能帮助到人的!(づ。◕‿‿◕。)づ
有19位网友表示赞同!
久爱不厌
对于一些高级用法,例如进程间通信或自定义信号处理,文章的介绍比较有限。希望作者能进一步完善这些内容,以便更好地满足不同用户的需求。
有19位网友表示赞同!
|赤;焰﹏゛
尽管指南提供了许多宝贵的经验教训,但仍然建议读者在实际使用 subprocess 时保持谨慎,仔细 review 代码逻辑,尤其是在涉及系统资源管理和安全问题的时候,更需谨慎对待。
有7位网友表示赞同!
窒息
总体来说,这是一篇非常有用的 Python 子进程教程,它帮助我更好地理解了 subprocess 的功能和用法。感谢作者的辛勤付出!
有12位网友表示赞同!