簡體   English   中英

是否可以在運行時將 arguments 傳遞給 python 生成的 exe?

[英]Is it possible to pass arguments to a python made exe at runtime?

我正在試驗文件 I/O。 我有一個小的練習程序,它在運行時創建一個文本文件。 我用 pyinstaller 打包它,這樣雙擊 exe 就會創建一個新文件夾,並在其中放置一個帶有“hello world”的文本文件。 十分簡單。

然后我開始想知道main() 這只是一個 function,對吧? 那么這是否意味着我可以在運行時將 arguments 傳遞給它?

我在考慮 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,我是否能夠以某種方式添加可選的 arguments。

我嘗試了上面的代碼和正在運行的test.exe --"myname"但這沒有用。

有沒有辦法做到這一點?

您正在尋找的是 sys 模塊或 optparse 模塊。

sys 將為您提供對命令行參數的非常基本的控制。

例如:

import sys

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

在上面的示例中,如果您要打開一個 shell 並鍵入 -

test.exe "myname"

結果 output 將是:

myname

請注意,sys.argv[0] 是您當前正在運行的腳本的名稱。 每個后續參數都由一個空格定義,因此在上面的示例中

test.exe -- myname

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

Optparse gives a much more robust solution that allows you to define command line switches with multiple options and defines variables that will store the appropriate options that can be accessed at runtime.

重寫你的例子:

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

output(在 myfile.txt 中)是預期的:

Hello, myname!
How are ya?

希望有幫助!

是的,您可以使用sys.argv來完成。 查看此鏈接: http://docs.python.org/library/sys.html#sys.argv 但是切記不要忘記import 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

編輯:但是,我對這個主題做了更多研究,發現了這個: https://stackoverflow.com/a/4188500/1276534

正如 katrielalex 指出的那樣,也許您也可以研究argparse 。? 它提供了更多的功能以及安全檢查。 有趣的信息。

這是一個很棒的教程: http://www.doughellmann.com/PyMOTW/argparse/

您正在尋找的是 python argparse 模塊之類的東西

或者您可以直接使用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...

只是完整性的注釋:現在有docopt ,這使得通過用簡單的語言描述它來編寫復雜的命令行界面變得非常容易。 記錄和解析接口實際上成為與 docopt 相同的任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM