簡體   English   中英

bash腳本在調用表單python腳本時不讀取行

[英]bash script does not read lines when called form python script

我有兩個簡單的腳本-我試圖將一些信息(日期作為輸入到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")

這是一個b子:

#!/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腳本。

我相信您需要file.close()而不是file.close 使用后者,因為您沒有調用該方法,所以實際上並沒有關閉文件。 由於尚未真正關閉文件,因此可能不會刷新文件,因此文件的全部內容可能會被緩沖,而不是寫入磁盤。

附帶說明一下,如果使用上下文管理器,這些事情會自動處理:

with open('foofile','w') as fout:
    fout.write("this data")
    fout.write("that data")

#Sleep well tonight knowing that python guarantees your file is closed properly
do_more_stuff(blah,foo,bar,baz,qux)

無需編寫臨時文件,而是將year,month和month-name的值作為參數發送到bash腳本。 即,在Python代碼中,刪除其中所有帶有file的行,然后替換
subprocess.call("/home/lukasz/bashdate.sh")

subprocess.call(['/home/lukasz/bashdate.sh', year, month, month_name])

然后在bash腳本中,用(例如)替換cat ... rm
y=$1; m=$2; mn=$3
它將年,月和月名稱放入外殼變量y,m和mn中。

也許嘗試將shell=True添加到調用中:

subprocess.call("/home/lukasz/bashdate.sh", shell=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM