注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水居

云在青山水在天,人在江湖不得闲

 
 
 

日志

 
 

python读取命令行输入和密码同时重定向到文件  

2014-04-21 11:28:16|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

查看全文


在脚本中,需要执行命令并重定向输入到文件或管道中,然后从中grep信息,但是有时命令中包含raw_input或getpass.getpass需要输入帐户和密码,如果重定向,则看不到输入信息的提示。
要支持命令行输入信息,同时重定向到文件,有两个思路:重定向stdout或重定义raw_input
1. 重定义stdout
用法:wrap.py log bin.py arg1 arg2
方法:重定义stdout,将std输入变更控制台与文件,相当实现了tee功能
问题:如果代码中出现了reload(sys),则本方法失效。例如 print('hi'); reload(sys); print('hi'),则reload后的输出无法输出到文件中。
import sys

class __redirection__:
    def __init__(self, fname):
        self.__console__=sys.stdout
        self.fp=open(fname, 'w')
    def write(self, output_stream):
        self.__console__.write(output_stream)
        self.fp.write(output_stream)

def main():
    if len(sys.argv) < 2:
        sys.stderr.write('Usage %s <tmp_file> [<args>]' % sys.argv[0])
    print 'redirect to %s' % sys.argv[1]
    r_obj=__redirection__(sys.argv[1])
    sys.stdout=r_obj
    sys.stderr=r_obj
    print sys.argv
    sys.argv=sys.argv[2:]
    l = {'__name__': '__main__','__file__': '/home/work/bin/upload.py'}

查看全文

  评论这张
 
阅读(1400)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017