66120


こんにちは。Python初心者です。

Pythonの教材を勉強していて分からない分野に直面しました。  
アル・スウェイガート著の『退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング 』のP146にあるコードからです。

下記のコードの13行目のaccount = sys.argv[1]のことで質問があります。  
16行目のコードであるpyperclip.copy(PASSWORDS[account])  
を読む限り、辞書PASSWORDSのキーにコマンドライン引数が代入されたaccountが  
指定されています。

試しに、args[0]が具体的にどのようなものかを調べてみると、このように  
出力されます。

[code]

    print(args[1])
    
[/code]

出力結果

[code]

    C:/Users/PycharmProjects/sampleproject2/pw.py
    
[/code]

このように、現在のスクリプトのディレクトリが出力されます。  
そして、疑問になりこちらで質問させていただきます。

**現在のディレクトリをaccountに代入して、そして、辞書PASSWORDS  
のキーに使う理由を教えてください。**

実際のコードはこちらです。

[code]

    PASSWORDS = {'email': 'f;ajljgodjdasofjd',
                 'blog': 'jdfjaksdasdkasasdd',
                 'luggage': '12345'
    }
    
    import sys
    import pyperclip
    if len(sys.argv) < 2:
        print('使い方: python pw.py[アカウント名]')
        print('パスワードをクリップボードにコピーします')
        sys.exit()
    
    account = sys.argv[1]
    
    if account in PASSWORDS:
        pyperclip.copy(PASSWORDS[account])
        print(account + 'のパスワードをクリップボードにコピーしました')
    else:
        print(account + 'というアカウント名はありません')
    
[/code]


CC BY-SA 4.0
2020-04-29T13:53:00.333
66117
2020-04-29T14:55:32.213
2020-04-29T14:55:32.213
39846
39846
question
python python3
コマンドライン引数がこちらの辞書型のキーになる理由を教えてください。

[code]

    account = sys.argv[0]
    
[/code]

ではなくて、

[code]

    account = sys.argv[1]
    
[/code]

ではないでしょうか。

[code]

    python pw.py [アカウント名]
    
[/code]

として Python スクリプト名に続けて「スペースを挟んで」アカウント名をコマンドオプションとして与えて実行すれば、それが `sys.argv[1]`
として拾われます。


CC BY-SA 4.0
2020-04-29T14:06:28.763
66120
2020-04-29T14:06:28.763
7290
66117
answer


> 現在のディレクトリをaccountに代入して、そして、辞書PASSWORDS  
>  のキーに使う理由を教えてください。

`account = sys.argv[0]`は、「現在のディレクトリ」というよりも、実行するスクリプトファイルのパス名ですね。

別ののユーザが実行したり、異なるプロジェクトで実行する場合、`sys.argv[0]`の内容が変わりますので、ユーザまたはプロジェクト毎にパスワードを管理するために、辞書PASSWORDSのキーに`sys.argv[0]`を指定しているのだと思います。

* * *

【追記】

以上の回答は見当違いな回答でした。

辞書PASSWORDSは単なる例でと思いました。別の方のコメントでわかりましたが「アカウント」は第一引数で渡すのですね。


CC BY-SA 4.0
2020-04-29T14:11:13.230
66121
2020-04-29T14:37:23.313
2020-04-29T14:37:23.313
35558
35558
66117
answer