由python输出设置的浮点bash变量不起作用

时间:2014-04-29 01:43:23

标签: python bash environment-variables

我对此代码中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的数值是引号,dtft的情况不是这样。我不知道为什么会这样,因为python打印出来的东西都是一样的。任何帮助将不胜感激!

2 个答案:

答案 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输出,我仍然会很好奇。