2014-04-29 72 views
0

我對這段代碼中bash變量${fwhm}有什麼問題感到困惑。由python輸出設置的浮點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 

除非我有這些CRNitschke.py返回3個,我需要有這個bash腳本使用浮點數腳本作爲其他地方的投入存在問題。

這樣
#! /usr/bin/env python 
import sys 
print "sys.argv=",sys.argv 

我得到奇怪的看的東西:例如,對於Python腳本print_args.py給出

~$ ./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'] 

- 亞當

次日更新: ... OK,這裏是一個小補充信息。我在腳本中,而不是在命令行中運行這個命令並輸出結果顯示如下:

+ 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會將所有內容打印出來。任何幫助,將不勝感激!

+0

'\ x1b [?1034h'是終端在某種形狀或形式下的轉義序列; '\ x1b'是逃跑。也許它是着色;也許這是別的。很大程度上取決於'?'實際代表什麼。 –

+0

@JonathanLeffler是否有任何類型的命令可以用來查找更多關於「$ {fwhm}」的詳細信息,以及這個轉義序列究竟代表什麼? – arwright3

+0

您可以使用例如'echo「{fhwm}」| od -c「(或任何類似的字符分析程序)來識別變量中的內容。對於序列的含義,您可以調查[ANSI轉義碼](http://en.wikipedia。org/wiki/ANSI_escape_code)維基百科。 –

回答

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

+0

這將工作得很好,如果我只在Python代碼中使用此env變量,但我實際上在多個不同的地方使用它,所以我需要'$ {fwhm}'在shell中沒有該轉義序列 – arwright3

0

類似的問題...有點兒。結果只是第一個值出於某種原因具有該轉義序列,並且每次都會給你帶來麻煩。我在第四個值中添加了名爲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 

感謝, - 亞當

附:我仍然很好奇,如果有人能告訴我的爲什麼 bash以這種方式解釋python輸出。