2014-01-09 45 views
4

我有一个调用python脚本的小CSH脚本。我试图将一个字符串传递给python脚本,并创建了一个CSH脚本,但它正在打破空格,在python中使用argparse进行伪造。我需要这个CSH脚本,因为在执行python之后,我需要使用一些遗留代码。将字符串传递给csh,然后传给python脚本中断空间

CSH脚本:
就在python脚本调用,通过所有的行参数到Python sys.argv

#!/bin/csh 
echo $argv[1-] 
python soocc.py $argv[1-] 

python脚本:
这个脚本需要识别像一个说法:argparse解析之前-opt "+arg1=1 +arg2=3 +arg3=0"。因此,首先识别sys.argv中是否有-opt,将该字符串写入变量中,然后从sys.argv中删除-opt "arg1=1 arg2=3 arg3=0"。这样argparse不会处理-opt(因为argparse将+ arg1视为一个参数,即使它在双引号内)。

#!usr/bin/python 
# -*- coding: UTF-8 -*- 

# show sys.argv list 
print sys.argv 
if '-opt' in sys.argv: 
    xipdef.opt = sys.argv[sys.argv.index('-opt') + 1] #attributes the string after "-opt" to xipdef.opt 
    sys.argv.remove(sys.argv[sys.argv.index('-opt') + 1]) # remove "<string>" from sys.argv 
    sys.argv.remove(sys.argv[sys.argv.index('-opt')]) # remove "-opt" from sys.argv 

print sys.argv 

问题:

soocc.csh -opt '"+arg1=1 +arg2=3 +arg3=0"' 

上CSH回波返回值:

-opt "+arg1=1 +arg2=3 +arg3=0" 

到目前为止好。问题是当参数传递给python脚本时。第一print sys.argv结果是:

['soocc.csh','-opt', '"+arg1=1', '+arg2=3', '+arg3=0"'] 

字符串双引号中正在以空间突破的sys.argv。我期待的是这样的:

['soocc.csh','-opt', "+arg1=1 +arg2=3 +arg3=0"] 

有人可以帮助我找到什么是错的?

+4

据我所知,这*不*覆盖“是有害的CSH编程”,为什么你不应该使用CSH作为一种编程语言的优秀作文,但它可能会被添加。 – geoffspear

+0

这不是'argparse'问题。 – hpaulj

+0

你可以在技术上使用argparse来传递任意数量的“args = +”选项。 – jwillis0720

回答

0

疯狂的哈克...但这应该工作。

opts = [] 
holder = [] 
for arg in sys.argv: 
    if '+' in arg: 
     holder.append(arg.replace('"', '')) 
    else: 
     opts.append(arg) 
holder = " ".join(holder) 
opts.append(holder) 
sys.argv = opts 
print sys.argv 

测试