我有两个简单的脚本 - 我试图将一些信息(日期作为输入到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脚本.
我相信你需要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)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |