0

注:私はすでにstackoverflow上のすべてのソリューションを試してみました!コマンドライン引数は取得されません

私はWindows 10とPython 3.5を使用しています。私はこのエラーを取得しています:

Traceback (most recent call last): 
File "geiger_plot.py", line 236, in <module> 
    main() 
TypeError: main() missing 1 required positional argument: 'argv' 

私はありとあらゆるコマンドを使用してスクリプトを実行しようとすると:

geiger_plot.py test 
python geiger_plot.py test 
"C:\Program Files\Python35\python.exe" geiger_plot.py test 
"C:\Program Files\Python35\python.exe" C:\Users\Chaosuser\Desktop\GeigerLog\geiger_plot.py test test test 

私はすでにPythonのコマンドライン引数のレジストリエントリを修正:

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command] 
@="\"C:\\Program Files\\Python35\\python.exe\" \"%1\" %*" 

[HKEY_CLASSES_ROOT\Applications\pythonw.exe\shell\open\command] 
@="\"C:\\Program Files\\Python35\\pythonw.exe\" \"%1\" %*" 

(これは輸出された.regです。そのため、何千ものバックスラッシュがあります) スクリプト自体には、私が知っている限りすべてのものを作成しました。これは、別のスクリプトから引数を使ってファイルパス(logfile)を渡して実行したいスクリプトです。それは常に私にエラーを与えたので、シェルから直接実行しようとしました。

import sys 

def main(argv): 
    sys.argv 
    print(sys.argv) 
    logfile = str(sys.argv[1]) 

それだけでも私にsys.argvの私の使用に関するエラーを与えるためにそこに取得していません!

どうしたのですか?

def main(argv): 
    print(sys.argv) 
to 
def main(): 
    print(sys.argv) 

男... Pythonは再びそのハードそう簡単に構成されています

SOLUTIONはARGVを削除することでした!

+0

Pythonは( 'mainという関数を実行しません)'自動的。スクリプトの終わりに 'main(sys.argv)'ステートメントであなた自身を呼び出します。もしあなたのスクリプトが別のもの(おそらく 'main()'の実行を望まない場合)でスクリプトをインポートすることができるなら、 'if __name__ == '__main __':'で条件付きにしたいかもしれません。 – martineau

+0

'HKEY_CLASSES_ROOT'に書き込まないでください。そのキーは、* reading *のための統合されたビューです。それへの書き込みの結果は不確定です。更新したいと思う正確なハイブに特化してください: '[HKLM | HKCU] \ SOFTWARE \ Classes'にあります。また、現在のユーザが 'Applications \ python.exe'サブキーを使用するように実際に設定されている場合は、Pythonのインストールを修正(壊れてしまった)しています。 Python.FileとPython.NoConFileを使用する必要があります。これはpy [w] .exeランチャーを使用する必要があります。ユーザーの選択は、(HKCU¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Explorer¥FileExts¥.py¥UserChoice')(読み取り専用)です。 – eryksun

+0

eryksun私はこれを手動で行い、regeditのエクスポート機能を使って他の人と分かち合うための鍵を手に入れました。これはどうですか?[HKLM | HKCU]特定ですか?私はpython.fileとpython.noconfileを見て、彼らは最初から大丈夫でした。 Theres no py.exeとpyw.exe、私の場合はpython.exe – Distelzombie

答えて

0

メインの署名からargvパラメータを削除し、ちょうどsys.argv[1]を使用します。

def main(): 
    print(sys.argv[1]) 

ます。また、メイン呼び出す必要があります:

if __name__ == '__main__': 
    main() 
+0

「mains signature」とは何ですか? def main(argv):?スクリプトの終わりに、sys.argvを入れるかしないか?違いはなんですか? – Distelzombie

+0

はい、それは私がmainsの署名によって意味したものです。私は答えを編集して、それをもっと明確にしました。 – Jay

+0

「if __name__ == '__main __': 'が既に底にありました。しかし、私はおそらく署名からargvを削除する必要があります。悪いことはありません。はい、それが解決策でした。 fgs、とてもシンプルな... – Distelzombie

関連する問題