python - 从 Bash 使用 STDIN 运行 Python

标签 python linux bash unix stdin

我有一个 bash 代码 (Mybash1.sh),其中我需要传递结果 到另一个包含 Python 的 bash 代码 (Mybash2.sh)

这是代码。 Mybash1.sh

#! /bin/bash
# Mybash1.sh
cut -f1,3 input_file.txt | sort | ./Mybash2.sh 

Mybash2.sh 是这样的:

#! /bin/bash
#Mybash2.sh
python mycode.py foo.txt <("$@") > output.txt
# do something for output.txt

我遇到的问题是 Mybash2.sh 中的“output.txt”不包含任何结果。 在 Mybash2.sh 中是否有正确的执行 Python 的方法?

请注意,如果我在中间临时文件上运行 mycode.py 将起作用 从 Mybash1.sh 给出的文件。但我想避免使用它,因为我会调用 Mybash2.shMybash1.sh 中的许多实例中。

mycode.py 的片段如下所示:

if __name__ == "__main__":
    import sys, os, fileinput
    progName = os.path.basename(sys.argv[0])
    if len(sys.argv) != 3:
        sys.exit('Usage: ' + progName + ' file1 file2')
    file1 = fileinput.input(sys.argv[1])
    file2 = fileinput.input(sys.argv[2])

    # do something for file1 and file2

    file1.close()
    file2.close()

最佳答案

在 python 中,你想要 file2 = sys.stdin

然后:

#! /bin/bash
#Mybash2.sh
python mycode.py foo.txt > output.txt

编辑:我刚刚看过 fileinput 文档,似乎如果您向 fileinput.input() 提供“-”,它将读取标准输入,因此无需对您的 Python 进行任何更改,这应该可以工作:

#! /bin/bash
#Mybash2.sh
python mycode.py foo.txt - > output.txt

关于python - 从 Bash 使用 STDIN 运行 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354724/

相关文章:

python - 可靠高效的 Linux 键值数据库?

linux - 从文件中删除未出现在另一个文件中的行,错误

linux - ipvsadm - 如何显示主机名和端口?

bash - || 是什么意思: in this line of bash script from an rpm spec file do?

regex - 如何删除不在我本地存储库中的远程标签?

python - 如何从具有纵横比的视频中调整帧的大小

python - 带函数返回的 Flask render_template

javascript - 如何使用 Python AES 解密以 Javascript 加密的数据?

linux - 如何在bash中将结果转换为整数

bash - 什么是间接扩张? ${!var*} 是什么意思?