2つの簡単なスクリプトがあります-いくつかの情報(Pythonスクリプトへの入力としての日付)をbashスクリプトに渡そうとしています。これがPythonのものです:
#!/usr/local/bin/python
import os
import sys
import subprocess
year = "2012"
month = "5"
month_name = "may"
file = open('date.tmp','w')
file.write(year + "\n")
file.write(month + "\n")
file.write(month_name + "\n")
file.close
subprocess.call("/home/lukasz/bashdate.sh")
そして、これがbashの1つです。
#!/bin/bash
cat /home/lukasz/date.tmp | \
while read CMD; do
echo -e $CMD
done
rm /home/lukasz/date.tmp
Pythonスクリプトは問題なく正常に動作します。bashスクリプトを呼び出しますが、whileループが実行されていないように見えます。rmコマンドが実行され、date.tmpファイルが削除されるため、bashスクリプトが全体的に実行されることはわかっています。ただし、Pythonでサブプロセス呼び出しをコメントアウトしてから、bashスクリプトを手動で実行すると、各行が正常に表示されます。
私が達成しようとしていることの簡単な説明。非常に大きなDBをCSV(約300テーブルと数ギガのデータ)にエクスポートするPythonスクリプトがあり、bashスクリプトを呼び出してCSVを1つのファイルに圧縮し、別の場所に移動します。pythonスクリプトに提供された月と年をbashスクリプトに渡す必要があります。