2014-01-09 40 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 

測試