2011-06-27 1 views
1

私は、プログラムへの入力を受け付けるためにargparseモジュールを使用しています。私は約6つのオプションの引数(前置する必要がある引数はリストのどこにでも置くことができます)と1つの位置引数(引数を決定する順序を使用する必須の引数)を定義しました。この(簡潔にするため削除余分なオプション引数付き):Pythonbrewで位置引数にスペースを使用するにはどうすればよいですか?

usage: Main.py [-h] [--site SITE] [--username USERNAME] [--password PASSWORD] 
      [--verbose] 
      filepath 

複数のPythonのインストールが共同することができます私はpythonbrewを使用して成功を収めている(のPython 2.6に付属)、Debianの上のPython 2.7のスクリプトを実行するためには、 - 同じサーバー上に存在します。それを使用することの良い副作用は私のスクリプト上で実行可能なアクセス許可を無効にすることができることを意味します。

ファイルパス(私の孤独な位置の引数)にスペースを入れて保存しようとするまで、うまくいきました。

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/ 
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My\ Client/' 
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My\ Client/" 
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My\ Client/] 

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My Client/ 
pythonbrew py Main.py --verbose '/media/rackspace/db1/clients/My Client/' 
pythonbrew py Main.py --verbose "/media/rackspace/db1/clients/My Client/" 
pythonbrew py Main.py --verbose [/media/rackspace/db1/clients/My Client/] 

すべては、誰もがこのエラーを確認することができ、同じエラーメッセージ

Main.py: error: unrecognized arguments: Client 

を返しますか?誰もまだPythonグループに言及していないという事実は、これがPythonbrewのバグであると信じていますが、私はPythonbrewを保ち、このスクリプトを実行する別の方法を探しています。今のところ、ファイルをスペースなしでフォルダに保存するだけですが、誰かがこのエラーを助けることができれば嬉しいです。

+0

「pythonbrew」のバグのようですが、巨大なものではありません。 –

+0

眠るためのOH。私は 'pythonbrew/commands/py.py'のソースと、まあ、即座のfacepalmを読みました。 –

答えて

2

問題はpythonbrew/commands/py.pyです。 subprocess.Popen()への各呼び出しは、文字列ではなくコマンドのリストを使用するように変更する必要があります。

+0

私は[shlex.split](http://docs.python.org/library/shlex.html)を使用して文字列コマンドから必要なリストを取得する前に成功しました –

+0

あなたはその答えを持っているかもしれません。私が(私がなぜそうしたのかわからない)私の例を組み合わせ、 'pythonbrew py Main.py --verbose ['/ media/rackspace/db1/clients/My Client /']'を使うと、正しくパスします。しかし、皮肉の黄金のビットで、それは括弧を組み込んだ引数を渡します。したがって、私のコードは** '/ media/rackspace/db1/clients/My Client /]'というディレクトリはありません**。リストを渡す別の方法がありますか? –

+0

私の答えが言うようにするのではなく、なぜあなたはそれをしますか? –

1

私はあまりにも新しいので、コメントを投稿できませんが、スペースをエスケープしようとしましたか?多分何かのように:

pythonbrew py Main.py --verbose /media/rackspace/db1/clients/My\ Client/

+0

引用符で囲まないと、バックスラッシュも表示されません。 –

+0

あなたの所見は正しいですが、実際にはバックスラッシュを使用しましたが、質問を書くときにスラッシュを入力しました。私は質問を編集しました。いいキャッチ! –

関連する問題