40339


Windows10にanacondaでPython3.6.3を入れましたが、プログラムに引数を渡せません。  
Pythonのバージョンと、Windowsのバージョンは以下の通りです。

[code]

    C:\Users\cf\Documents\GDrive\SBI\book\Python>python -V
    Python 3.6.3 :: Anaconda, Inc.
    
    C:\Users\cf\Documents\GDrive\SBI\book\Python>ver
    Microsoft Windows [Version 10.0.16299.125]
    
[/code]

このブログ <http://cartman0.hatenablog.com/entry/2016/04/11/153733> を参考に、  
assocコマンドで拡張子.pyをPython.Fileに関連付け、  
ftypeコマンドでPython.Fileをpython.EXEに関連付けました。

[code]

    C:\Users\cf\Documents\GDrive\SBI\book\Python>assoc .py
    .py=Python.File
    
    C:\Users\cf\Documents\GDrive\SBI\book\Python>ftype Python.File
    Python.File="C:\Users\cf\Anaconda3\python.EXE" "%1" %*
    
    C:\Users\cf\Documents\GDrive\SBI\book\Python>which python
    C:\Users\cf\Anaconda3\python.EXE
    
[/code]

以下のようなプログラムを書きました。

[code]

    C:\Users\cf\Documents\GDrive\SBI\book\Python>cat commandline.py
    # commandline.py
    import sys
    print(sys.version_info)
    print(sys.argv)
    print(sys.argv[1])
    print(sys.argv[2])
    print(type(sys.argv))
    
[/code]

で、以下のようにlove、kiss、hugという引数を渡して実行しましたが、引数が渡りません。

[code]

    C:\Users\cf\Documents\GDrive\SBI\book\Python>commandline.py love kiss hug
    sys.version_info(major=3, minor=6, micro=3, releaselevel='final', serial=0)
    ['C:\\Users\\cf\\Documents\\GDrive\\SBI\\book\\Python\\commandline.py']
    Traceback (most recent call last):
      File "C:\Users\cf\Documents\GDrive\SBI\book\Python\commandline.py", line 5, in <module>
        print(sys.argv[1]) IndexError: list index out of range
    
[/code]

どうもsys.argv[0]としてプログラム名が渡っているだけで、引数が無視されているようです。  
pythonと書いてやると引数が渡ります。

[code]

    C:\Users\cf\Documents\GDrive\SBI\book\Python>python commandline.py love kiss hug
    sys.version_info(major=3, minor=6, micro=3, releaselevel='final', serial=0)
    ['commandline.py', 'love', 'kiss', 'hug']
    love
    kiss
    <class 'list'>
    
[/code]

拡張子の関連づけだけでpythonを実行し、引数を渡す方法はあるでしょうか。  
よろしくお願いします。


CC BY-SA 3.0
2017-12-16T05:55:37.297
40319
2017-12-18T07:24:14.350
2017-12-16T12:38:25.557
19110
26673
question
python windows anaconda
WindowsでanacondaのPythonに引数が渡せない？


自己解決で申し訳ありません。  
以下のブログを検索して解決しました。

<http://crape.org/tips/programming/91-python-assoc.html>

> Windowsの関連付け設定が残っていたら動かないので、レジストリエディタを開いて以下のキーを削除。
[code]

    HKEY_CURRENT_USER\Software\Classes\.[拡張子]
    HKEY_CURRENT_USER\Software\Classes\[拡張子]_auto_file
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.[拡張子]
    
[/code]

具体的には以下のキーが残っていたので削除しました。

[code]

    HKEY_CURRENT_USER\Software\Classes\.py
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py
    
[/code]

もし同じことで悩んでおられるようでしたら、regeditの使用はシステムを破壊することがあるので自己責任でお願いします。  
以上、お騒がせしました。


CC BY-SA 3.0
2017-12-17T05:31:21.500
40339
2017-12-17T05:40:59.100
2017-12-17T05:40:59.100
26673
26673
40319
answer