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

2024-05-16 02:58:47 发布

您现在位置: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",但是没有成功。

有办法吗?


Tags: 函数texttxthello参数stringmaindef
3条回答

是的,你可以用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

正如katrielex所指出的,也许你也可以研究一下^{}。?它提供了更多的功能和安全检查。有趣的信息。

这里有一个很棒的教程:http://www.doughellmann.com/PyMOTW/argparse/

您需要的是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?

希望能有帮助!

你要找的是类似于pythonargparse 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...

相关问题 更多 >