在sys.stdin.readline()
返回之前等待 EOF(或新行),所以如果我有控制台输入,则readline()
等待用户输入。相反,如果没有要处理的内容,我想打印帮助并以错误退出,而不是等待用户输入。
原因:我正在寻找一个命令行行为类似于grep
.
测试用例:
没有输入,也没有任何管道,打印帮助
$ 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)