2013-04-10 101 views
2

我正在使用zbarimg來掃描條形碼,我想將輸出重定向到python腳本。我如何可以重定向以下命令的輸出:將bash輸出重定向到python腳本

zbarimg code.png 

到Python腳本,應該是什麼樣的腳本?

我嘗試了下面的腳本:

#!/usr/local/bin/python 
s = raw_input() 
print s 

我通過發出使其成爲一個可執行如下:

chmod +x in.py 

比我跑以下幾點:

zbarimg code.png | in.py 

我知道這是錯了,但我找不出其他東西!

+1

可能重複:http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python – dm03514 2013-04-10 15:34:24

+0

'zbarimg code.png'的輸出示例是什麼樣的? – 2013-04-10 15:36:52

回答

1

從命令使用管道運營商|是正確的,其實。它沒有工作嗎?

您可能需要顯式地指定python腳本路徑爲

zbarimg code.png | ./in.py 

和@dogbane說,從標準輸入讀取像sys.stdin.readlines()比使用raw_input

3

使用sys.stdin從您的python腳本中的標準輸入讀取。例如:

import sys 
data = sys.stdin.readlines() 
+0

然後我應該寫zbarimg code.png | in.py或者我應該做zbarimg code.png> in.py? – 2013-04-10 15:35:41

+0

你需要管道進入python腳本:'zbarimg code.png | in.py' – dogbane 2013-04-10 15:36:10

+1

它的工作原理,但與zbarimg code.png | ./in.py – 2013-04-10 15:45:58

1

我不得不調用更好python程序命令爲 somecommand | python mypythonscript.py而不是somecommand | ./mypythonscript.py。這對我有效。後者產生了錯誤。

我的目的:總結一下所有的MP3文件通過管道的soxi -D *mp3 輸出到蟒蛇持續時間:soxi -D *mp3 | python sum_durations.py


詳情:

soxi -D *mp3生產:

122.473016 
139.533016 
128.456009 
307.802993 
... 

sum_durations。 py腳本:

import sys 
import math 
data = sys.stdin.readlines() 
#print(data) 
sum = 0.0 
for line in data: 
    #print(line) 
    sum += float(line) 

mins = math.floor(sum/60) 
secs = math.floor(sum) % 60 

print("total duration: " + str(mins) + ":" + str(secs)) 
相關問題