调用表单python脚本时,bash脚本不会读取行

Luk*_*asz 2 python bash

我有两个简单的脚本 - 我试图将一些信息(日期作为输入到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")
Run Code Online (Sandbox Code Playgroud)

这是bash one:

#!/bin/bash

cat /home/lukasz/date.tmp | \
while read CMD; do
    echo -e $CMD
done
rm /home/lukasz/date.tmp
Run Code Online (Sandbox Code Playgroud)

Python脚本工作正常,没有问题.它调用bash脚本但看起来像while循环不运行.我知道bash脚本确实运行,因为执行了rm命令并删除了date.tmp文件.但是如果我在python中注释掉子进程调用然后手动运行bash脚本它可以很好地显示每一行.

简要解释我想要完成的事情.我有一个出口一个非常大的数据库,以CSV(几乎300表和数据几音乐会),然后调用bash脚本到CSV的压缩成一个文件,并将其移动到另一个位置的Python脚本.我需要将提供给python脚本的月份和年份传递给bash脚本.

mgi*_*son 5

我相信你需要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)
Run Code Online (Sandbox Code Playgroud)