【发布时间】:2012-10-30 16:12:01
【问题描述】:
sys.stdin.readline() 在返回之前等待 EOF(或新行),所以如果我有控制台输入,readline() 会等待用户输入。相反,如果没有要处理的内容,我想打印帮助并以错误退出,而不是等待用户输入。
原因:
我正在寻找一个命令行行为类似于grep 的python 程序。
测试用例:
没有输入,也没有任何管道,打印帮助
$ argparse.py
argparse.py - prints arguments
echo $? # UNIX
echo %ERRORLEVEL% # WINDOWS
2
命令行参数解析
$ argparse.py a b c
0 a
1 b
2 c
接受管道命令
$ ls | argparse.py
0 argparse.py
1 aFile.txt
parseargs.py 清单:
# $Id: parseargs.py
import sys
import argparse
# Tried these too:
# import fileinput - blocks on no input
# import subprocess - requires calling program to be known
def usage():
sys.stderr.write("{} - prints arguments".fomrat(sys.argv[0])
sys.stderr.flush()
sys.exit(2)
def print_me(count, msg):
print '{}: {:>18} {}'.format(count, msg.strip(), map(ord,msg))
if __name__ == '__main__':
USE_BUFFERED_INPUT = False
# Case 1: Command line arguments
if len(sys.argv) > 1:
for i, arg in enumerate(sys.argv[1:]):
print_me( i, arg)
elif USE_BUFFERED_INPUT: # Note: Do not use processing buffered inputs
for i, arg in enumerate(sys.stdin):
print_me( i, arg)
else:
i=0
##### Need to deterime if the sys.stdin is empty.
##### if READLINE_EMPTY:
##### usage()
while True:
arg = sys.stdin.readline() #Blocks if no input
if not arg:
break
print_me( i, arg)
i += 1
sys.exit(0)
【问题讨论】:
-
我认为
Fasle应该是False:-),而argparse.py应该是parseargs.py -
elif False应该做什么?这是故意的吗? -
我猜那只是因为它是一个标志......他可以改变以快速管理行为......
-
修正错别字。 elif False 是故意的,我想表明我已经考虑过迭代 sys.stdin 并且由于缓冲而无法使用它。 (还有未使用的文件输入和子进程的入口)