2011-05-14 20 views
0

这与我以前的帖子here有关。 ,条件命令行参数[可能使用getopt()? ]

[[email protected]_vm /]# torque_history.py -m 4 
Job Id  User  Real User  Start Date  S End Date  Exec Host Queue 
----------- -------- -------------- -------------- - -------------- ----------- ------- 
0.vmtest2 dteam001 Kashif M. Raza 18/04 16:53:03 C 18/04 16:53:05 vmtest1.abc express 
2.vmtest2 dteam007 Arnau Hahkala 19/04 13:21:19 C 19/04 13:23:26 vmtest3.abc medium 
.... 
.... 
160.vmtest2 sgmatlas Andrew Lloyd 30/04 15:44:36 C 30/04 15:54:04 node029.abc short 
162.vmtest2 sgmops Maarten Lapka 30/04 16:44:36 C 30/04 16:45:48 vmtest1.abc express 
--------------------------------- 
107 records in history (0.04 sec) 

-m 4打印记录仅四月份,如果没有给出选项打印整个记录等:实际运行的脚本,我输出的结果是这样的。我希望我的用户能够构造条件查询字符串,例如:m == "4" && RealUser == "Maarten Lapka",并且还以他们所需的格式输出结果,并输出他们想要的唯一字段,如:JobId && StartDate && User,这意味着用户正在查找那些作业记录由Maarten Lapka于4月提交,并且希望按照他提到的顺序仅打印作业ID,作业开始日期和用户名。所以,一个可能的命令可能是:

torque_history.py -c 'm == "4" && RealUser == "Maarten Lapka"' -f 'JobId && ExecHost && StartDate'

其中-c是短期的--constraint-f--format或什么的。任何人都可以建议我这样做吗?是否有可能使用getopt()

我的问题的一部分是我们使用RHEL5的变体(即SL5,SLC5,CentOS),它们都以Python v2.4为标准,我无法确定每个站点都并行运行v2.6 。所以,我想尽可能保持接近v2.4并尽可能使用getopt()。我的计划是使用shedskin编译python代码并分发C++文件以最大限度地减少兼容性问题。在这种情况下,我可以使用v2.6,但是我必须使用支持skin的模块,getopt()就是其中之一。

对不起,如果我让你们很难,但我真的很期待一些帮助和建议。谢谢你的时间。干杯!!!

回答

1

optparse是纯粹的Python,所以我会忘记getopt()并将其拉到您的应用程序,如果需要的话。

try: 
    import optparse 
except ImportError: 
    import external.optparse as optparse 

别忘了创建external/__init__.py

+1

请注意,optparse在Python 2.7和新版本的Python 3.x中已弃用。它被替换为argparse:http://docs.python.org/library/argparse.html#module-argparse – 2011-05-14 10:54:40

+0

同样的区别。所有这一切意味着现在使用'getopt()'的理由就更少了。 – 2011-05-14 10:55:42

+0

@Ignacio,@Zaur:我理解你的观点,但我已经说明了我的局限性。另一方面,除Fedora之外,没有任何主要的disto包含任何高于v2.6的内容。但是你会愚蠢到将Fedora用作你的生产平台。在Linux世界中,如果RHEL(和Debian在某种程度上)没有将特定版本作为默认版本发布,那么对于更大的项目来说,它几乎没有使用。我还不知道RHEL6,但是没有一个RHEL-clone发行版还没有准备好生产v6。我们可能根本看不到CentOS6。干杯!! – MacUsers 2011-05-14 11:08:48