我有兩個簡單的腳本 - 我試圖將一些信息(日期作爲輸入到python腳本)傳遞給bash腳本。這裏的蟒蛇之一:當調用窗體python腳本bash腳本不讀取行
#!/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")
而這裏的慶典之一:
#!/bin/bash
cat /home/lukasz/date.tmp | \
while read CMD; do
echo -e $CMD
done
rm /home/lukasz/date.tmp
Python腳本工作正常,沒有問題。它調用bash腳本,但它看起來像while循環不運行。我知道bash腳本確實運行,因爲rm命令被執行並且date.tmp文件被刪除。但是,如果我註釋掉python中的子進程調用,然後手動運行bash腳本,它可以很好地顯示每一行。
簡要說明我正在努力完成什麼。我有一個python腳本,可以將一個非常大的數據庫導出爲CSV(近300個表格和幾個數據集),然後調用bash腳本將CSV壓縮爲一個文件並將其移動到另一個位置。我需要將提供給python腳本的月份和年份傳遞給bash腳本。
順便說一句,那三個變量都是你需要傳遞給你的實際腳本的嗎?如果是這樣,我建議將它們作爲命令行參數傳遞,而不是使用臨時文件。像Python中使用'subprocess.call([「/ home/lukasz/bashdate.sh」,year,month,month_name])'',然後'year = $ 1;月= $ 2; month_name = $ 3'在Bash中。要檢查傳遞給Bash腳本的參數個數,可以使用'if [$#-lt 3];然後回聲「請更多論據。」;出口1; fi '(或者如果您只需要三個參數,請將'-lt'更改爲'-eq')。 – Blair
爲什麼你需要一個bash腳本來將CSV壓縮成一個文件並將其移動到另一個位置?你不知道標準庫中的'shutil'和/或'zipfile'和'os'嗎? – abarnert
@abarnert直接來自python.org上的shutil頁面:警告即使更高級別的文件複製函數(shutil.copy(),shutil.copy2())也無法複製所有文件元數據。除此之外(這是一個問題),另一個問題是CSV位於/ tmp中(這是mysqld由於權限而可以輕鬆寫入文件的唯一位置)。最後,只需調用一個bash腳本的解決方案就簡單多了,而且它可以工作。考慮到這是每個月手動進行一次(它需要一些其他用戶輸入的文檔),它足夠滿足我的需求。 – Lukasz