我嘗試在 Python 3.10 中撰寫一個簡單的程式,它打開(至少)一個瀏覽器視窗,并且可以從命令列獲取輸入以打開其他視窗:
import webbrowser
import sys
if len(sys.argv) > 1:
for a in range(len(sys.argv)):
webbrowser.open(sys.argv[a])
else:
webbrowser.open("www.google.com")
我從一個單行批處理檔案運行它,這樣我就可以輸入其他要打開的網站。這確實很好用,但是,無論是否傳遞命令列引數,它總是打開 Google(如果我只是不帶引數運行它,它會打開 Google。如果我使用 LinkedIn 作為引數運行它,它會打開 Google 和LinkedIn。如果我使用 wikipedia 和 LinkedIn 作為引數,它會同時打開這兩個以及 Google 等)。
但是我想要的是只有在沒有傳遞任何引數時才打開谷歌......奇怪的是,當我運行完全相同的代碼,但用 print 陳述句替換 webbrowser.open() 時,它確實做到了應該做的:
import sys
if len(sys.argv) > 1:
for a in range(len(sys.argv)):
print(sys.argv[a])
else:
print("www.google.com")
將命令列引數傳遞給此代碼會導致它僅列印引數,“www.google.com”僅在未傳遞引數時列印。
對不起,但我完全不知道為什么這兩個代碼的行為不同。我通過運行一個批處理檔案來解決這兩個問題
@py.exe C:\Users\[Route to the file]\[File].py %*
我嘗試用 替換 else 陳述句elif len(sys.argv) == 1,但它的作用完全相同。我看到的唯一區別是 webbrowser 模塊的使用。可以以這種方式匯入模塊更改代碼的行為嗎?
先感謝您!
uj5u.com熱心網友回復:
argv捕獲 python 腳本名稱和網站,因為您正在檢查 if ,所以您已經知道這些名稱和網站len > 1。但是,您隨后將遍歷所有 args,導致瀏覽器嘗試將腳本名稱和網站作為網站加載。由于腳本名稱不是有效的 url,我假設您的瀏覽器正在打開您的默認頁面,該頁面恰好是 google.com。
您需要跳過第一個引數,您可以通過sys.arvg[1:]
import webbrowser
import sys
if len(sys.argv) > 1:
for a in sys.argv[1:]:
webbrowser.open(a)
else:
webbrowser.open("www.google.com")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/429410.html
標籤:Python if 语句 python-web浏览器
上一篇:如何檢查一個變數是否存在于串列中,但如果它不是按數字順序忽略它?
下一篇:函式沒有回傳任何值
