簡體   English   中英

python和sys.argv

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM