Tag:

如何从subprocess获取“实时”信息。python(2.5)

我想以下面的方式使用subprocess模块: 创build一个可能需要很长时间执行的新进程。 捕获stdout (或stderr ,或潜在的两个,一起或分开) 处理来自subprocess的数据,也许是在接收到的每一行上触发事件(在wxPython中说)或者直接打印出来。 我用Popen创build了进程,但是如果使用通讯(),那么一旦进程终止,数据就会一次全部到达我。 如果我创build一个单独的线程,执行阻塞readline() myprocess.stdout (使用stdout = subprocess.PIPE myprocess.stdout ),我也没有得到这个方法的任何行,直到进程终止。 (不pipe我设定为bufsize) 有没有办法处理这个不可怕的,并在多个平台上运行良好?

subprocess:在Windows中删除subprocess

在Windows上, subprocess.Popen.terminate调用win32的TerminalProcess 。 但是,我看到的行为是我正在尝试终止的进程的subprocess仍在运行。 这是为什么? 如何确保stream程启动的所有subprocess都被终止?

从python运行一个程序,让脚本死后继续运行

我试过运行这样的东西: subprocess.Popen(['nohup', 'my_command'], stdout=open('/dev/null', 'w'), stderr=open('logfile.log', 'a')) 这适用于父级脚本正常退出,但如果我杀死脚本(Ctrl-C),我所有的subprocess也被杀死。 有没有办法避免这种情况? 我关心的平台是OS X和Linux,使用Python 2.6 和 Python 2.7。

Popen冲突的可执行文件/path

我想使用Popen从Python脚本中调用ImageMagick中的“convert”实用工具,如下所示: Popen(["convert", input_path, "-flop", output_file_path]) (上面的例子简单地反转了图像水平) 问题是,当我在Windows中运行脚本时,它错误地调用Windows附带的convert.exe实用程序将FAT分区转换为NTFS! (位于\ Windows \ system32) 现在,如果我在system32以外的任何目录中随机打开一个命令提示符,然后键入“convert”,它将正确运行ImageMagick可执行文件。 所以,这意味着Popen自动查找system32。 我怎样才能让它不看在system32,并运行正确的可执行文件?

我如何从Pythonasynchronous运行外部命令?

我需要从Python脚本asynchronous运行一个shell命令。 通过这个我的意思是我希望我的Python脚本能够在外部命令closures时继续运行,并执行任何需要的操作。 我读过这篇文章: 在Python中调用外部命令 然后,我去了,做了一些testing,它看起来像os.system()将做的工作,只要我在命令的末尾使用& ,以便我不必等待它返回。 我想知道的是,如果这是完成这样的事情的正确方法? 我尝试了commands.call()但它不会为我工作,因为它阻止外部命令。 请让我知道如果使用os.system()这是可取的,或者如果我应该尝试其他的路线。

即使当前的孩子已经终止,Popen也在等待孩子的进程

我正在使用Windows 8 / XP上的Python 2.7。 我有一个程序A运行另一个程序B使用下面的代码: p = Popen(["B"], stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() return B运行一个批处理脚本C. C是一个长时间运行的脚本,我想B退出,即使C还没有完成。 我用下面的代码(在B中)完成了它: p = Popen(["C"]) return 当我运行B时,它按预期工作。 当我运行A时,我预计B退出时会退出。 但是A等到C出口,即使B已经离开了。 有什么想法和可能的解决scheme可能是什么? 不幸的是,将A改为B的明显解决scheme不是一种select。 下面是一个函数示例代码来说明这个问题: https : //www.dropbox.com/s/cbplwjpmydogvu2/popen.zip?dl=1 任何input是非常感激。

为什么java多态性不能在我的例子中工作

我有这4个java clases:1 public class Rect { double width; double height; String color; public Rect( ) { width=0; height=0; color="transparent"; } public Rect( double w,double h) { width=w; height=h; color="transparent"; } double area() { return width*height; } } 2 public class PRect extends Rect{ double depth; public PRect(double w, double h ,double d) { width=w; height=h; […]

如何使用subprocess popen Python

由于os.popen正在被subprocess.popen取代,我想知道我将如何转换 os.popen('swfdump /tmp/filename.swf/ -d') 到subprocess.popen() 我试过了: subprocess.Popen("swfdump /tmp/filename.swf -d") subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable # containing /tmp/filename.swf 但是我想我没有把这个写出来。 任何帮助,将不胜感激。 谢谢

Python子stream程/ Popen与修改后的环境

我相信在稍微修改一下的环境下运行一个外部命令是一个很常见的情况。 这就是我倾向于这样做的方式: import subprocess, os my_env = os.environ my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"] subprocess.Popen(my_command, env=my_env) 我有一种直觉,认为有更好的办法。 它看起来好吗?

Python的 – 如何将string传递到subprocess.Popen(使用stdin参数)?

如果我做到以下几点: import subprocess from cStringIO import StringIO subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0] 我得到: Traceback (most recent call last): File "<stdin>", line 1, in ? File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__ (p2cread, p2cwrite, File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles p2cread = stdin.fileno() AttributeError: 'cStringIO.StringI' object has no attribute 'fileno' 显然,一个cStringIO.StringIO对象没有足够接近文件鸭以适合subprocess.Popen。 我如何解决这个问题?