将字符串传递给csh,然后传递给python脚本,以分隔空格

2024-05-14 08:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个调用python脚本的CSH脚本。我试图将一个字符串传递给python脚本,但是它破坏了空间,在python中使用argparse是有困难的。我需要这个CSH脚本,因为在python执行之后,我需要使用一些遗留代码。在

CSH脚本:
只是python脚本调用,将所有的行参数传递给pythonsys.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中删除{}。这样,argparse将不会处理-opt(因为argparse将+arg1视为参数,即使它在双引号内)。在

^{pr2}$

问题:

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

csh echo返回:

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

到目前为止还不错。问题是当参数被传递给python脚本时。第一个结果是:

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

双引号内的字符串被sys.argv分隔开。我期待的是:

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

有人能帮我找出问题所在吗?在


Tags: 字符串echo脚本参数sysargparsearg3opt
1条回答
网友
1楼 · 发布于 2024-05-14 08:59:01

疯狂的黑客…但这应该管用。在

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

测试

相关问题 更多 >

    热门问题