请各位看下这个Python版本兼容的问题.

2012-12-11 17:30:05 +08:00
 ry_wang
一个应用程序需要通过argparse模块解析传参,但argparse是Python2.7以上有的,Python2.6的需要使用optparse这个模块.

所以在导入模块以及创建实例时的时候我使用如下方法来做.

try:
from argparse import ArgumentParser
except:
from optparse import OptionParser as ArgumentParser

parser = ArgumentParser()

但是这时候发现一个苦逼的问题.
argparse这个模块使用add_argument()来定义参数解析.如下:
parser.add_argument('address', help='server address')
parser.add_argument('-u', dest='username', help='username')
parser.add_argument('-p', dest='port', help='port')

可optparse这个模块是使用add_option()方法来定义参数....

请问各位,这种情况应该如何避归呢?分Python版本来分别做?统一使用optparse这个模块?

我现在的想法是按照下面这样来搞?相当于闹个别名?

class MyArgumentParser(ArgumentParser):

def __init__():
pass

def my_add_argument():
pass


谢谢.
3944 次点击
所在节点    Python
12 条回复
bhuztez
2012-12-11 17:37:01 +08:00
pip install argparse
ry_wang
2012-12-11 17:43:59 +08:00
@bhuztez 能装我还费这劲,55555
timonwong
2012-12-11 17:47:11 +08:00
argparse should work on Python >= 2.3, it was tested on:

2.3.5, 2.4.4, 2.5.5, 2.6.5 and 2.7
3.1, 3.2

http://pypi.python.org/pypi/argparse

直接包含进代码的Libs中吧。
只需要 argparse.py 和其 LICENSE
ry_wang
2012-12-11 17:55:25 +08:00
@timonwong 这是最后实在不行的办法.
还是希望能有方法解决这个问题,因为后续可能还会有这种需求.
CoX
2012-12-11 17:59:11 +08:00
为啥不直接用 optparse呢,反正2.7里有这个模块
ry_wang
2012-12-11 18:01:27 +08:00
@CoX 哈哈,万一以后optparse这个模块在新版本的Python下没了呢.
我好纠结.哈哈.
CoX
2012-12-11 18:10:33 +08:00
@ry_wang

try:
from argparse import ArgumentParser
parser=ArgumentParser.add_argument
except:
from optparse import OptionParser as ArgumentParser
parser=ArgumentParser.add_option

parser('-p', dest='port', help='port')

不过感觉真没必要考虑那么多:)
bhuztez
2012-12-11 18:11:08 +08:00
@ry_wang 直接把文件复制过去啊,反正就一python文件
clowwindy
2012-12-11 19:06:45 +08:00
这就是我用 getopt 的原因
yupbank
2012-12-12 10:27:59 +08:00
要不,自己把不靠谱的接口全部山寨一遍吧,以后发现不兼容的,就在前面换。
BOYPT
2012-12-12 10:54:05 +08:00
计算机领域的一切问题,都可以通过增加一个抽象层解决……
ry_wang
2012-12-12 11:49:38 +08:00
主要是我这个人比较隔路,有系统默认模块的就不愿意再装其它的,可以程序层面简单避归掉的就想在程序上做.但是呢,程序还不能太丑...
就像能一个awk里做完的分析,绝对不用awk+grep来做....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/54639

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX