繁体   English   中英

将字符串传递给csh然后传递给python脚本打破空格

[英]Passing string to csh and then to python script breaking spaces

我有一个调用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" 因此,首先它确定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 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"]

有人可以帮我找到错误吗?

疯狂的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

经测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM