将文本从python传递到shell | unicode |对其应用剪切

将文本从python传递到shell | unicode |对其应用剪切,python,shell,unicode,awk,cut,Python,Shell,Unicode,Awk,Cut,我有一个python脚本,它基本上解析xml文件,使用包re,并按如下方式打印文本: string = str(search_compiled.groups(0)[0].encode('utf-8')) + "%" + str(text.encode('utf-8')) print string string="$($file.py $arg1 $arg2 $arg3)" varA="$(echo "$string" | cut -d'%' -f1)" varB="$(echo "$strin

我有一个python脚本,它基本上解析xml文件,使用包
re
,并按如下方式打印文本:

string = str(search_compiled.groups(0)[0].encode('utf-8')) + "%" + str(text.encode('utf-8'))
print string
string="$($file.py $arg1 $arg2 $arg3)"
varA="$(echo "$string" | cut -d'%' -f1)"
varB="$(echo "$string" | cut -d'%' -f2)"
echo "$string"
我收到shell脚本中的文本,如下所示:

string = str(search_compiled.groups(0)[0].encode('utf-8')) + "%" + str(text.encode('utf-8'))
print string
string="$($file.py $arg1 $arg2 $arg3)"
varA="$(echo "$string" | cut -d'%' -f1)"
varB="$(echo "$string" | cut -d'%' -f2)"
echo "$string"
总之,我需要用分隔符“%”将传递的字符串一分为二,并将结果存储在
varA
varB

拆分不会发生。 字符串显示了整个内容:A部分加上B部分。这里有一个问题,我在python脚本中添加的“%”没有打印出来


有谁能帮助我了解出了什么问题吗?

您可以像在问题中一样使用管道和切割命令,但分隔符上没有引号,请使用-d%而不是-d“%”

varA=$(echo $string | cut -f1 -d%)  
varB=$(echo $string | cut -f2 -d%)  

我第三次重读这篇文章,我认为这是基本问题(从您的描述中):

字符串显示了整个内容:A部分加上B部分。这里有一个问题,我在python脚本中添加的“%”不会被打印出来。

在我看来,将数据转换为utf-8然后再转换回字符串似乎是可疑的。能否将python程序中的字符串创建行更改为:

string = u'{}%{}'.format(search_compiled.groups(0)[0].encode('utf-8'), text.encode('utf-8'))
您可能是双重编码,因此这可能是您需要的:

string = u'{}%{}'.format(search_compiled.groups(0)[0], text)
在shell脚本调用python脚本之前,将其添加到shell脚本中:

export PYTHONIOENCODING=UTF-8
解释

使用
awk-F“%”{print“a=“$1”b=“$2}”
像这样

eval
a=aaa b=bbb
相当于输入端子

$ a=aaa
$ b=bbb

你有什么错误?
file.py
的输出是什么?将脚本的名称放在变量
文件中似乎非常奇怪。您知道,使用
%
的传统Python 2打印格式函数要求格式字符串中的字符
%
加倍,以便打印文本
%
file.py
是否打印出ASCII以外的内容?我猜可能是这样,因为您正在编码到
utf-8
@tripleee将file.py用于此示例。当然,真正的文件名不同。还有,是的,我知道。问题是,即使我使用“$”而不是“%”,问题也无法解决。@jasv Hi。谢谢你的链接。但它并没有像预期的那样工作。就像在python中一样,我们有
split(“%”,1)
在第一次出现时进行拆分。这里有类似的东西吗?我为代码错误道歉。正在学习stackoverflow的规则/etc。您的代码示例使用带“%”的分隔符,我的代码示例使用的是不带引号的%分隔符。我测试了它,它在中间有一个字符串。不起作用。我肯定这是一个编码问题。因为命令在隔离状态下工作,但是python输出的字符串不能工作。正确的解决方案仍然是
varA=${string#*%};varB=${string%%%*}
——如果坚持使用
echo
,则应在参数周围加上双引号<代码>回显“$string”
。不。不起作用。没有错误。但是cut没有分裂。你能解释一下你的代码是如何工作的吗?这将使OP和其他人能够理解并在其他地方应用您的方法(如果适用)。仅适用于代码的答案可删除。-很抱歉我不会用英语解释。即使你用自己的语言写,用谷歌翻译成蹩脚的英语,也总比没有强。