我正在尝试使用文件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"
但是没有用。
有办法做到这一点吗?
答案 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
。它提供了更多功能和安全检查。有趣的信息。
答案 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相同。