是否可以在运行时将参数传递给python make exe?

时间:2012-04-06 17:43:48

标签: python

我正在尝试使用文件I / O.我有一个小练习程序,可以在运行时创建一个文本文件。我用pyinstaller打包它,以便双击exe创建一个新文件夹,并在其中放置一个带有“hello world”的文本文件。十分简单。

然后我开始怀疑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"但是没有用。

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:5)

是的,您可以使用sys.argv执行此操作。看看这个链接:http://docs.python.org/library/sys.html#sys.argv。但请记住不要忘记import sys,然后就可以使用它了。     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/

答案 1 :(得分:4)

您正在寻找的是sys模块或optparse模块。

sys将为您提供对命令行参数的基本控制。

例如:

import sys

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

在上面的示例中,如果要打开shell并键入 -

test.exe "myname"

结果输出为:

myname

请注意,sys.argv [0]是您当前运行的脚本的名称。每个后续参数都由空格定义,因此在上面的示例中

test.exe -- myname

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

Optparse提供了一个更强大的解决方案,允许您使用多个选项定义命令行开关,并定义将存储可在运行时访问的相应选项的变量。

重写你的例子:

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?

希望有所帮助!

答案 2 :(得分:2)

您正在寻找的内容类似于python argparse module

或者您可以使用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 :(得分:0)

只需注意完整性:现在有docopt,这使得通过简单的语言描述复杂的命令行界面非常容易。记录和解析界面实际上与docopt相同。