[英]python and sys.argv
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或不是stderr的sys.argv。
順便說一句,您可以將錯誤消息直接傳遞給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])
在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])
我會這樣做:
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
應該是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.