我有一个调用python脚本的小CSH脚本。我正在尝试将一个字符串传递给一个CSH脚本的python脚本,但它打破了空间,在python中使用argparse进行了破坏。我需要这个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"
。首先,它确定-opt
中是否有sys.argv
,将字符串写入变量,然后从-opt "arg1=1 arg2=3 arg3=0"
中删除sys.argv
。这样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 echo:
-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"]
有人可以帮我找出错误吗?
答案 0 :(得分:0)
疯狂的hacky ......但这应该有效。
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
测试