繁体   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