我有一个 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.sh
在 Mybash1.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/