我想用Python2.6的版本子过程,因为它允许的 Popen.终止() 功能,但我被困与Python2.5.是有一些合理的清洁方式使用的新版本的模块在我的2.5代码?某种 from __future__ import subprocess_module?

有帮助吗?

解决方案

我知道这个问题已经回答了,但它的价值,我用的是Python 2.3的船舶与Python 2.6和它的工作罚款subprocess.py。如果您在文件的顶端阅读注释,它说:

  

# This module should remain compatible with Python 2.2, see PEP 291.

其他提示

虽然这并不直接回答你的问题,它可能是值得了解的。

__future__进口实际上只改变编译器选项,因此,虽然它可以把与到语句或使字符串文字产生统一码,而不是可疑交易,它不能改变在Python标准库模块的功能和特性。

我跟着在Python 2.5使用python 2.6 subprocess.py关于卡米尔Kisiel的建议它完美地工作。为了更方便,我创建了一个distutils的包,您可以easy_install的和/或包含在扩建。

要在python 2.5项目中使用的子过程从蟒2.6:

easy_install taras.python26

在代码

from taras.python26 import subprocess

在附加件

[buildout]
parts = subprocess26

[subprocess26]
recipe = zc.recipe.egg
eggs = taras.python26

这里有一些方法,结束对Windows进程,直接取自 http://code.activestate.com/recipes/347462/

# Create a process that won't end on its own
import subprocess
process = subprocess.Popen(['python.exe', '-c', 'while 1: pass'])


# Kill the process using pywin32
import win32api
win32api.TerminateProcess(int(process._handle), -1)


# Kill the process using ctypes
import ctypes
ctypes.windll.kernel32.TerminateProcess(int(process._handle), -1)


# Kill the proces using pywin32 and pid
import win32api
PROCESS_TERMINATE = 1
handle = win32api.OpenProcess(PROCESS_TERMINATE, False, process.pid)
win32api.TerminateProcess(handle, -1)
win32api.CloseHandle(handle)


# Kill the proces using ctypes and pid
import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, process.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)

好了Python是开源的,你可以自由地采取并行线程功能,从2.6和其移动到自己的代码,或将其作为一个参考,以实现自己的。

有关原因,应该是显而易见的没有办法有一个Python的混合体,它可以导入新版本的部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top