python在线命令行_从命令行传递列表到Python

1586010002-jmsa.png

I would like to make my python script run from the command line when supplies with some arguments. However, one of the arguments should be a list of options specific to one segment of the script. Would string parsing be the only way to do this by actually constructing the list after the "command line list" string is split from commas? If so, how would you go about that?

Example: -details=['name', 'title', 'address']

解决方案

Program:

import sys, ast, getopt, types

def main(argv):

arg_dict={}

switches={'li':list,'di':dict,'tu':tuple}

singles=''.join([x[0]+':' for x in switches])

long_form=[x+'=' for x in switches]

d={x[0]+':':'--'+x for x in switches}

try:

opts, args = getopt.getopt(argv, singles, long_form)

except getopt.GetoptError:

print "bad arg"

sys.exit(2)

for opt, arg in opts:

if opt[1]+':' in d: o=d[opt[1]+':'][2:]

elif opt in d.values(): o=opt[2:]

else: o =''

print opt, arg,o

if o and arg:

arg_dict[o]=ast.literal_eval(arg)

if not o or not isinstance(arg_dict[o], switches[o]):

print opt, arg, " Error: bad arg"

sys.exit(2)

for e in arg_dict:

print e, arg_dict[e], type(arg_dict[e])

if __name__ == '__main__':

main(sys.argv[1:])

Command line:

python py.py --l='[1,2,3,[1,2,3]]' -d "{1:'one',2:'two',3:'three'}" --tu='(1,2,3)'

Output:

args: ['--l=[1,2,3,[1,2,3]]', '-d', "{1:'one',2:'two',3:'three'}", '--tu=(1,2,3)']

tu (1, 2, 3)

di {1: 'one', 2: 'two', 3: 'three'}

li [1, 2, 3, [1, 2, 3]]

This code snippet will take short or long command switches like -l or --li= and parse the text after the switch into a Python data structure like a list, tuple or a dict. The parsed data structure ends up in a dictionary with the long-form switch key.

Using ast.literal_eval is relatively safe. It can only parse python data definitions.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值