if len(sys.argv) < 2:
sys.stderr.write('Usage: sys.argv[0] ')
sys.exit(1)
if not os.path.exists(sys.argv[1]):
sys.stderr.write('ERROR: Database sys.argv[1] was not found!')
sys.exit(1)
这是我正在处理的代码的一部分。第一部分我试图说,如果用户没有输入python programname something
,那么它将退出。
第二部分我试图查看数据库是否存在。在这两个地方我都不确定我是否有正确的方法来写出stderr的sys.argv。
答案 0 :(得分:96)
顺便说一句,您可以将错误消息直接传递给sys.exit:
if len(sys.argv) < 2:
sys.exit('Usage: %s database-name' % sys.argv[0])
if not os.path.exists(sys.argv[1]):
sys.exit('ERROR: Database %s was not found!' % sys.argv[1])
答案 1 :(得分:34)
在Python中,您不能将任意Python表达式嵌入到文字字符串中,并将其替换为字符串的值。你需要:
sys.stderr.write("Usage: " + sys.argv[0])
或
sys.stderr.write("Usage: %s" % sys.argv[0])
此外,您可能需要考虑使用print
的以下语法(对于早于3.x的Python):
print >>sys.stderr, "Usage:", sys.argv[0]
使用print
可以说代码更容易阅读。 Python会自动在print
语句的参数之间添加一个空格,因此在上面的示例中,冒号后面会有一个空格。
在Python 3.x中,您将使用print
函数:
print("Usage:", sys.argv[0], file=sys.stderr)
最后,在Python 2.6及更高版本中,您可以使用.format
:
print >>sys.stderr, "Usage: {0}".format(sys.argv[0])
答案 2 :(得分:31)
我会这样做:
import sys
def main(argv):
if len(argv) < 2:
sys.stderr.write("Usage: %s <database>" % (argv[0],))
return 1
if not os.path.exists(argv[1]):
sys.stderr.write("ERROR: Database %r was not found!" % (argv[1],))
return 1
if __name__ == "__main__":
sys.exit(main(sys.argv))
如果需要,可以将main()
导入其他模块,并简化调试,因为您可以选择argv
应该是什么。