gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:16:39 25 4
gpt4 key购买 nike

我正在试验文件 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" 但没有成功。

有没有办法做到这一点?

最佳答案

您正在寻找的是 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 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

并且输出(在 myfile.txt 中)将是预期的:

Hello, myname!
How are ya?

希望对您有所帮助!

关于python - 是否可以在运行时将参数传递给 python 生成的 exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com