2010-03-01 30 views
2

我有一個bash代碼(Mybash1.sh),我的結果需要通過 另一個bash的代碼(Mybash2.sh)包含的Python運行Python和STDIN從猛砸

這裏是代碼。 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 <("[email protected]") > output.txt 
# do something for output.txt 

我的問題是, 「output.txt的」 在Mybash2.sh不含結果。 在Mybash2.sh中有沒有正確的方法來執行Python?

請注意,mycode.py將工作,如果我運行它在Mybash1.sh給出的中間臨時 文件。但我想避免使用它,因爲在Mybash1.sh之內的很多情況下我都會撥打Mybash2.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() 

回答

0
在myscript1.sh

,你傳遞一個管道myscript2.sh,因此,它的某種STDIN爲myscript2.sh。您應該從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中做任何事嗎?

2

在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