print proc1
"\u001b[H\u001b[2J\r\nPRINT ME"
如何仅打印“打印我”。我不想打印其他块。
以上是Python fabric
提供run
调用时shell脚本的输出。
我将fabric
消息返回到Flask
return json.dumps(proc1)
更新:
flask
的回复如下:
"Output": "\"\\u001b[H\\u001b[2J\\r\\nPROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT\""}
我正在考虑删除\u001b[H2J
和其他垃圾
答案 0 :(得分:2)
我能想到的最简单的方法是使用str.split
及其maxsplit
参数:
In [1]: output = "\"\\u001b[H\\u001b[2J\\r\\nPROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT\""
In [2]: output.split('\\r\\n', maxsplit=1)[-1]
Out[2]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT"'
如果您使用旧版本的python(我相信python2和python3.x,x< = 2),您可能需要将maxsplit
指定为位置参数:
In [3]: output.split('\\r\\n', 1)[-1]
Out[3]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT"'
输出开头的垃圾似乎是一个清除终端的转义序列(至少做:
print "\u001b[H\u001b[2J\r\nPRINT ME".decode('unicode-escape')
在Konsole中有这种效果。
假设格式始终为"UTUT\r\n
且U
为\uxxxx
形式的unicode转义,其中x
为十六进制数字,T
为终端由[
加上数字和字母组成的转义符,以下内容应该能够删除第一个字符:
In [9]: regex = re.compile(r'"\\u(\d|[a-f])+\[(\w|\d)+\\u(\d|[a-f])+\[(\d|\w)+\\r\\n')
In [10]: regex.sub('', output)
Out[10]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT"'
如果您不想要最后一个"
,您可以这样做:
regex.sub('', output)[:-1]
这将简单地修剪字符串的开头并删除最后一个字符。
如果由于某种原因,"
可能不是您可以使用的最后一个字符:
In [2]: regex = re.compile(r'"\\u(\d|[a-f])+\[(\w|\d)+\\u(\d|[a-f])+\[(\d|\w)+\\r\\n(?P<content>[^"]+)')
In [3]: output = "\"\\u001b[H\\u001b[2J\\r\\nPROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT\""
In [4]: regex.match(output).group('content')
Out[4]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT'
我假设您需要的字符串不包含"
。
答案 1 :(得分:-1)
Python将字符串proc1表示为字节字符串。确保它表示为unicode字符串,在字符串前面加上u。
所以,
proc1 = u"\u001b[H\u001b[2J\r\nPRINT ME"