我对此代码中bash变量${fwhm}
的错误感到非常困惑。脚本CRNitschke.py
返回3个浮点数,我需要在这个bash脚本中使用它:
fwhm_dt_ft=(`/u/ki/awright/thiswork/eyes/CRNitschke/CRNitschke.py ${file}`)
fwhm=${fwhm_dt_ft[0]}
dt=${fwhm_dt_ft[1]}
ft=${fwhm_dt_ft[2]}
运行之后,bash中的所有内容看起来都很正常:
~$ echo "fwhm= " ${fwhm}
fwhm= 0.52
~$ echo "dt= " ${dt}
dt= 139.960346726
~$ echo "ft= " ${ft}
ft= 15.2307051015
除非我将其作为其他地方的输入,否则会出现问题。例如,由:
给出的python脚本print_args.py
#! /usr/bin/env python
import sys
print "sys.argv=",sys.argv
我看起来很奇怪:
~$ ./print_argv.py ${fwhm} ${dt} ${ft}
sys.argv= ['./print_argv.py', '\x1b[?1034h0.52', '139.960346726', '15.2307051015']
有谁知道fwhm
变量可以解决什么问题,或者我如何修复它?
这很奇怪,因为当我输入其中的东西时很好:
~$ abc=(0.52 139.960346726 15.2307051015)
~$ ./print_argv.py ${abc[0]} ${abc[1]} ${abc[2]}
sys.argv= ['./print_argv.py', '0.52', '139.960346726', '15.2307051015']
- 亚当
下一天更新: ...好的,这是一个小小的补充信息。我在脚本而不是在命令行运行此命令,输出显示:
+ echo 'fwhm= ' '0.58'
fwhm= 0.58
+ echo 'dt= ' 114.988365258
dt= 114.988365258
+ echo 'ft= ' 12.190067533
ft= 12.190067533
您可以在echo
行中看到fwhm
的数值是引号,dt
和ft
的情况不是这样。我不知道为什么会这样,因为python打印出来的东西都是一样的。任何帮助将不胜感激!
答案 0 :(得分:0)
试试这段代码:
import re
escape = re.compile(r'\x1b\[\?\d+h')
sys.argv = list([escape.sub('', x) for x in sys.argv])
这是How can I remove the ANSI escape sequences from a string in python
的类似问题答案 1 :(得分:0)
我想通了......有点儿。事实证明,由于某种原因,第一个值具有该转义序列,并且每次都会给您带来麻烦。我在第4个值中添加了一个名为out
的返回值,这只是一个我不使用的虚拟对象。那样fwhm
不在第一位,一切都很好,请参阅:
+ out_fwhm_dt_ft=(`/u/ki/awright/thiswork/eyes/CRNitschke/CRNitschke.py ${file}`)
+ out='0'
+ fwhm=0.54
+ dt=134.840822967
+ ft=12.3659326799
+ echo 'out= ' '0'
out= 0
+ echo 'fwhm= ' 0.54
fwhm= 0.54
+ echo 'dt= ' 134.840822967
dt= 134.840822967
+ echo 'ft= ' 12.36
谢谢, - 亚当
P.S。如果有人能告诉我为什么 bash以这种方式解释python输出,我仍然会很好奇。