【问题标题】:Redirect bash output to python script将 bash 输出重定向到 python 脚本
【发布时间】:2013-04-10 15:30:55
【问题描述】:

我正在使用 zbarimg 扫描条形码,我想将输出重定向到 python 脚本。如何重定向以下命令的输出:

zbarimg code.png

到 python 脚本,脚本应该是什么样的?

我尝试了以下脚本:

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

我通过发出以下命令使其成为可执行文件:

chmod +x in.py

比我跑了以下:

zbarimg code.png | in.py

我知道这是错的,但我想不通!

【问题讨论】:

标签: python bash


【解决方案1】:

使用sys.stdin 从您的python 脚本中的标准输入读取。例如:

import sys
data = sys.stdin.readlines()

【讨论】:

  • 那我应该写zbarimg code.png | in.py 还是我应该做 zbarimg code.png > in.py ?
  • 你需要通过管道进入python脚本:zbarimg code.png | in.py
【解决方案2】:

实际上,在命令中使用管道运算符| 是正确的。没用吗?

您可能需要明确指定 python 脚本的路径,如

zbarimg code.png | ./in.py

正如@dogbane 所说,从标准输入读取sys.stdin.readlines() 比使用raw_input 更好

【讨论】:

    【解决方案3】:

    我不得不调用 python 程序命令为 somecommand | python mypythonscript.py 而不是 somecommand | ./mypythonscript.py。这对我有用。后者产生了错误。

    我的目的:通过soxi -D *mp3的管道输出总结所有mp3文件的持续时间 进入python:soxi -D *mp3 | python sum_durations.py


    详情:

    soxi -D *mp3produces:

    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))
    

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多