使用Bash中的STDIN运行Python

2024-10-03 23:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是密码。我的bash1.sh

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

Mybash2.sh是这样的:

^{pr2}$

我的问题是“输出.txt“Mybash2.sh中没有结果。 有没有正确的方法在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()

Tags: 代码pytxtbashinputifshsys
2条回答

在myscript1.sh中,您正在向myscript2.sh传递一个管道,因此,这是myscript2.sh的某种STDIN。您应该从myscript2.sh读取该STDIN,而不接受输入参数。例如myscript2.sh

#!/bin/bash
while read myinput
do
 echo "myinput is $myinput"
 # assuming you are passing each input line from the cut command into Python
 python mycode.py foo.txt $myinput > output.txt
done

最后,为什么所有这些依赖关系?你不能用Python或shell做所有事情吗??

在python中,您希望拥有file2 = sys.stdin

然后:

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

编辑:我刚刚看到了fileinput文档,如果您将'-'提供给文件输入.input(),它将读取stdin,因此在Python中没有任何更改的情况下,这应该可以工作:

^{pr2}$

相关问题 更多 >