簡體   English   中英

如何在python中使用sys.argv來檢查參數的長度,以便它可以作為腳本運行?

[英]How to use sys.argv in python to check length of arguments so it can run as script?

好的,這是我的代碼的一部分(我已導入sys)

if __name__ == '__main__':


MyCaesarCipher = CaesarCipher() #MyCaesarCipher IS a CaesarCipher()

if len(sys.argv) >1:
    #what will it check? 

Done = False   
while not Done:
    print('C Clear All')
    print('L Load Encrypted File')
    print('R Read Decrypted File')
    print('S Store Encrypted File')
    print('W Write Decrypted File')
    print('O Output Encrypted Text')
    print('P Print Decrypted Text')
    print('E Encrypt Decrypted Text')
    print('D Decrypted Encrypted Text')
    print('Q Quit')
    print('----------------')
    print('Enter Choice>')

所以我想做的是如果命令行長度大於1,程序將作為腳本運行。

這是指令:

如果沒有輸入命令行參數,則腳本進入菜單模式。 如果在腳本運行期間提供了多於1個命令行參數(腳本名稱以外的任何內容),則它將進入單一運行模式。

不過,我不知道這意味着什么。

什么是sys.arvg:

傳遞給Python腳本的命令行參數列表。 argv[0]是腳本名稱。

演示:文件名:1.py

import sys

if __name__=="__main__":
    print "command arguments:", sys.argv 

輸出:

$ python 1.py arg1 arg2 
command arguments: ['1.py', 'arg1', 'arg2']
$ python 1.py
command arguments: ['1.py']

你的問題是,我們必須通過Command Line Argument和Menu運行代碼。

當用戶從命令行提供Enter Choice時,請將提供的值用於下一個進程。

如果用戶未從命令行提供“輸入選擇”,則要求用戶從菜單中輸入“選擇”。

演示:

文件名:1.py

import sys

if __name__ == '__main__':
    try:
        arg_command = sys.argv[1]
    except IndexError:
        arg_command = ""

    Done = False
    while not Done:
        if arg_command=="":
            print('\nMenu')
            print('C Clear All')
            print('L Load Encrypted File')
            print('Q Quit')
            print('----------------')
            print('Enter Choice>')
            command = raw_input('Enter Selection> ').strip()[0].upper()
        else:
            command = arg_command
            #- set arg value to empty to run Menu option again.
            arg_command = ""

        if command == 'C':
            print "In Clear All event."
        elif command == 'L':
            print "In Clear All event."
        elif command == "Q":
            break
        else:
            print "Wrong Selection."

輸出:

輸入命令行給出的選擇:

$ python 1.py C
In Clear All event.

Menu
C Clear All
L Load Encrypted File
Q Quit
----------------
Enter Choice>
Enter Selection> q
$ 

沒有命令行參數。

$ python 1.py

Menu
C Clear All
L Load Encrypted File
Q Quit
----------------
Enter Choice>
Enter Selection> l
In Clear All event.

Menu
C Clear All
L Load Encrypted File
Q Quit
----------------
Enter Choice>
Enter Selection> q
$ 

這就是,當你學習這樣的語言時,你可以通過打印出你不太懂的東西來獲得相當好的東西。

試試這個:

步驟1)制作一個如下所示的程序:

import sys
if __name__ == '__main__':
    for idx, arg in enumerate(sys.argv):
       print("arg #{} is {}".format(idx, arg))
    print len(sys.argv)

之后,從命令行運行您的程序,如下所示:

$ python3 test_script.py

然后,像這樣運行:

$ python3 test_script.py somearg someother andanother etc "23908452359"

您發現的內容可能對執行您要解決的任務很有用。

最后,“菜單模式”聽起來像是腳本將從用戶那里獲取輸入。 因此,您需要使用input()來執行此操作。 聽起來你需要做出關於何時使用菜單模式的決定,你已經開始使用上面的if-test了。

但是,嘗試一下,你會發現它。

指令希望腳本使用命令行參數來執行腳本。

python script.py [arg1] [arg2] [arg3] ....

可以通過sys.argv訪問args。

sys.argv = ['script.py', '[arg1]', '[arg2]', '[arg3]']

當存在args時,您將需要使用命令行界面而不是菜單界面。

因為你似乎對python很新,這是一個使用你的代碼的簡單例子。 您必須完成菜單和菜單選項的實際代碼,但它確實使用sys.argv

import sys

def menu():
    Done = False   
    while not Done:
        print('C Clear All')
        print('L Load Encrypted File')
        print('R Read Decrypted File')
        print('S Store Encrypted File')
        print('W Write Decrypted File')
        print('O Output Encrypted Text')
        print('P Print Decrypted Text')
        print('E Encrypt Decrypted Text')
        print('D Decrypted Encrypted Text')
        print('Q Quit')
        print('----------------')
        print('Enter Choice>') #should get user input here
        Done = True

if __name__=="__main__" :
    if len(sys.argv) > 1 : 
    #Here if an argument is present run it or load the menu
        print "run whatever option was entered on the commandline"
    else:
        menu()

首先,您必須了解argv是什么,嘗試創建此腳本,並將其命名為learning_argv.py

import sys

print(sys.argv)

現在嘗試像這樣運行腳本:

$ python3 learning_argv.py
$ python3 learning_argv.py a
$ python3 learning_argv.py a b c
$ python3 learning_argv.py AWESOME TEXT

看看argv是什么?

當你測試argv的長度是否大於1時你正在做什么,基本上測試你是否收到超出腳本名稱的任何東西。

將來,您可以創建為菜單創建的類似結構,以處理從命令行直接發送的參數。

看看這個快速教程 ,以便更好地理解argv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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