草庐IT

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的解决方案

python - Popen 等待子进程,即使直接子进程已经终止

我在Windows8/XP上使用Python2.7。我有一个程序A使用以下代码运行另一个程序B:p=Popen(["B"],stdout=PIPE,stderr=PIPE)stdout,stderr=p.communicate()returnB运行批处理脚本C。C是一个长时间运行的脚本,即使C尚未完成,我也希望B退出。我使用以下代码(在B中)完成了它:p=Popen(["C"])return当我运行B时,它按预期工作。但是,当我运行A时,我希望它在B退出时退出。但是即使B已经退出,A也会等到C退出。关于正在发生的事情以及可能的解决方案有什么想法吗?不幸的是,将A更改为看起来像B的显而易

python - 如何使用 Python Popen 处理多个参数?

我正在尝试制作一个带有按钮的PyGtkGui。当用户按下此按钮时,gnome-terminal会提示用户输入密码。然后它将克隆这个Gitrepository用于geditJQuery片段。然后,它将js.xml文件复制到/usr/share/gedit/plugins/snippets/js.xml最后,它强行删除了Git存储库。命令:gnome-terminal-xsudogitclonegit://github.com/pererinha/gedit-snippet-jquery.git&&sudocp-fgedit-snippet-jquery/js.xml/usr/share/

Python:在后台进程上使用 popen poll

我在后台运行一个很长的进程(实际上是另一个python脚本)。我需要知道它什么时候完成。我发现Popen.poll()总是为后台进程返回0。还有其他方法吗?p=subprocess.Popen("sleep30&",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)a=p.poll()print(a)以上代码从不打印None。 最佳答案 你不需要使用shellbackgrounding&语法,因为subprocess会自己在后台运行进程只要正常运行命令,然后等待Pope

python - 将 Ctrl-C 发送到通过 subprocess.Popen 和 ssh 启动的远程进程

如何向Popen()对象中的多个ssh-t进程发送Ctrl-C?我有一些Python代码可以启动远程主机上的脚本:#kickoff.py#icall'ssh'w/the'-t'flagsothatwhenipress'ctrl-c',itget's#senttothescriptontheremotehost.otherwise'ctrol-c'wouldjust#killthingsonthisend,andthescriptwouldstillberunningonthe#remoteservera=subprocess.Popen(['ssh','-t','remote-host

php - popen 延迟后返回输出?

我正在使用popen()执行FFMPEG以获得过程的结果。我这样做的主要原因是我可以流式传输恒定输出并构建进度条。问题是流程开始了,我收到了一些初始信息。然而,直到该过程完成后,其余信息才会出现。因此,从本质上讲,在流程进行时间隔出现的其余输出(进度输出)在流程之前被延迟,并且在流程完成后立即全部出现,这是无用的。我需要输出不断出现,这样我才能更新进度条。如果我将2>&1更改为2>stderr.txt,该文本文件始终接收输出,但我想在php中接收,因为许多进程可能正在运行。有人对解决这个问题有什么想法吗?似乎没有人能弄清楚这一点……这让我发疯了!如果有人帮助我解决这个问题(并实际解决它

python - 无法使用 python --version 在 linux 上使用 Popen 获取 python 版本

我正在编写以下代码。#!/usr/bin/pythonimportsubprocessimportoscmd='python--version'stdout=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE).stdoutver=stdout.read()此代码只是在控制台上打印python版本,变量ver没有获得任何值。谁能帮我理解为什么这不起作用?我有类似的代码来检查节点上是否正在运行进程。cmd='ps-ef|grepcmserver|grep-vgrep'stdout=subprocess.Popen(cmd,shel

c - 使用 popen() 打开的文件描述符上的 pclose() 返回 errno 10(无子进程)

我正在运行linux并尝试执行以下操作:在当前目录运行ls(使用popen)将结果输出到缓冲区(使用来自管道描述符的fread)关闭管道(使用pclose)。一切正常(缓冲区已正确填充ls结果)但是当我检查时pclose()结果它返回-1并且errno设置为10(无子进程)。不知道为什么这正在发生,但我不能忽视它(除非对为什么会发生这种情况有合理的解释)。我的代码:FILE*lsoutput=NULL;lsoutput=popen("ls-ltr","r");if(readFromPipeOrFile(lsOutput,pSendBuf,pSendActualSize)==-1){pr

c++ - popen 上的死锁

我正在Linux(嵌入ARM)下编写一个运行两个线程的小应用程序。我在一个函数中做了一个“popen”,这为进入该函数的第二个线程创建了一个死锁。但是,最先进入该函数的第一个线程仍然正确运行。这里是一些代码示例:pthread_mutex_tmutex1=PTHREAD_MUTEX_INITIALIZER;intsendCommand(conststd::string&command,std::string&answer){FILE*fd;//Filedescriptortocommandoutputcharanswer_c[COMMAND_BUFFER_SIZE];//Theansw