2012-04-06 16 views
3

私はファイルI/Oを試しています。私は実行時にテキストファイルを作成する小さな練習プログラムを持っています。 exeファイルをダブルクリックすると新しいフォルダが作成され、その中に「hello world」というテキストファイルが配置されるようにpyinstallerでパッケージ化しました。簡単なピーシー。実行時に実行されるpythonに引数を渡すことは可能ですか?

その後、私はmain()について不思議に思っていました。これはほかの機能と同様の機能ですつまり、実行時に引数を渡すことができますか?

私はSteamクライアントと、ショートカットに '-dev'や '-console'のようなものを置く方法について考えていました。これを私が作ったpython exeにする方法はありますか?私が説明することができる

はひどく、ので、ここでの例です:

def makeFile(string): 
    if string: 
     f = open('mytext.txt', 'w') #create text file in local dir 
     print >> f, 'hello, ' + string + '! \nHow are ya?' 
     f.close() 
    else: 
     f = open('mytext.txt', 'w') #create text file in local dir 
     print >> f, 'hello, person! \nHow are ya?' 
     f.close() 

def main(string = None): 
    makeFile(string)  

をだから私はこのコードを取り、それをexeファイルを作る場合、私は何とか私のオプションの引数を追加することができるだろう。

私は上記のコードを試して、実行中のtest.exe --"myname"が動作しませんでした。

これを行う方法はありますか?

答えて

3

はい、sys.argvとすることができます。このリンクを確認してください:http://docs.python.org/library/sys.html#sys.argv。しかし、import sysを忘れていないことを覚えておいて、それを使用することができます。は、しかし、私はこのトピックに関するいくつかのより多くの研究を行うと、このアウトが見つかりました::https://stackoverflow.com/a/4188500/1276534

としてkatrielalex 輸入SYS

# If there is an argument passed to your file 
if len(sys.argv) > 1: 
    # argv[1] has your filename 
    filename = sys.argv[1] 
    print (filename) 

# Output... 
# new-host:~ yanwchan$ python3.2 test.py text.txt 
# text.txt 

argv[0]がありtest.py

argv[1]text.txt

編集あり指摘すると、おそらくargparseを次のように見ることができます。まあ。それは、より多くの機能性と安全性チェックを提供します。興味深い情報。ここ

とは素晴らしいチュートリアルです:あなたが探しているものをhttp://www.doughellmann.com/PyMOTW/argparse/

+0

これは完全に働きました!ありがとう!!答えに – Zack

+0

更新、(sys.argvの)lenの場合 'ん> 1 'ファイル名引数があるかどうかをテストするために、そして(すべての問題をキャッチする)' argparse'が優れていることが示唆されています。 – George

2

パイソン​​

のようなものであるか、あなたは直接あなたが「何sys.argv

import sys 
sys.argv[0] # the name of the command that was called 
sys.argv[1] # the first argument, eg '--dev' 
sys.argv[2] # the second... 
3

を使用して値を読み取ることができます探しているのは、sysモジュールかoptparseモジュールです。

sysはコマンドライン引数を非常に基本的に制御します。

例えば

:上記の例で

import sys 

if __name__ == "__main__": 
    if len(sys.argv)>1: 
     print sys.argv[1] 

、あなたがシェルと型を開くとしたら -

test.exe "myname" 

結果の出力は次のようになります。

myname 

sys.argv [0]は、現在実行しているスクリプトの名前です。 optparseはコマンドラインで複数のオプションを切り替え、そのことができます適切なオプションを格納する変数を定義して定義することができますはるかに堅牢なソリューションを提供しますあなたの例では

test.exe -- myname 

argv[0] = "test.exe" 
argv[1] = "--" 
argv[2] = "myname" 

上記のように、後続の各引数は、スペースで定義されています実行時にアクセスされます。

再書き込みあなたの例:

from optparse import OptionParser 

def makeFile(options = None): 
    if options: 
     f = open('mytext.txt', 'w') #create text file in local dir 
     print >> f, 'hello, ' + options.name + '! \nHow are ya?' 
     f.close() 
    else: 
     f = open('mytext.txt', 'w') #create text file in local dir 
     print >> f, 'hello, person! \nHow are ya?' 
     f.close() 



if __name__ == "__main__": 
    parser = OptionParser() 
    parser.add_option('-n','--name',dest = 'name', 
         help='username to be printed out') 
    (options,args) = parser.parse_args() 
    makeFile(options) 

あなたはとあなたのプログラムを実行します:

test.exe -n myname 

と(myfile.txtの中)出力が期待されるであろう:

Hello, myname! 
How are ya? 

希望に役立ちます!完全性について

+0

ああ、それはかなりきちんとしています!ありがとう!幻想的な例で – Zack

+0

+1 – George

0

ちょうどノート:今docoptがあり、それは本当に簡単に、単純な言葉でそれを記述することで、複雑なコマンドライン・インタフェースを書くことができます。インタフェースの文書化と解析は、実際にはdocoptと同じタスクになります。

関連する問題