2011-07-15 32 views
0

为了说明问题,我正在编写的Python模块是一个自写的.py文件(名称为转换器),而不是标准的Python库。如何在仅使用Windows命令行的Python模块中运行函数?

不管怎么说,我想以某种方式超载我的功能,使得

converter file_name 

键入将文件的名称发送到

def converter(file_name): 
    # do something 

我已经通过谷歌和StackOverflow上被广泛搜索,但能找不到需要使用特殊字符(如$)或命令行选项(如-c)的任何内容。有谁知道如何做到这一点?

回答

2

您可以使用类似PyInstaller的东西来创建一个exe文件的py文件。

要使用该参数在Python:

import sys 

if __name__ == "__main__": 
    converter(sys.argv[1]) 
+0

我的意思是本地Windows命令行,而不是Python的交互式解释器。 – Edwin

+0

哎呀,应该先阅读以下内容。 – Edwin

+0

是的,在你创建一个exe后,你可以像你在你的问题中所说的那样使用它。 – Jacob

1

您可以在Windows类型的shell:

python converter.py file_name.txt 

给的参数蟒蛇内sys.argv列表。所以访问它们:在您要运行该文件的底部

import sys 
sys.argv[0] # this will be converter.py 
sys.argv[1] # this will be file_name.txt 

,添加:

if __name__ == "__main__": 
    converter(sys.argv[1]) 

有第二个参数:

python converter.py file_name1.txt file_name2.txt 

这将得到结果:

import sys 
sys.argv[0] # this will be converter.py 
sys.argv[1] # this will be file_name1.txt 
sys.argv[2] # this will be file_name2.txt 

如果您正在执行许多复杂的命令行选项,我会推荐使用类似the builtin argparse(用于2.7/3.2 +)或argparse on pypi(用于2.3+)的内容。

+0

如果converter()方法需要两个文件名,第二个文件是可选的呢?那么情景应该是什么? – khan

+0

已更新的答案。希望它有帮助。 – TorelTwiddler

+0

运行时出现此错误:Traceback(最近一次调用的最后一次): sys.argv [1]#这将是file_name1文件“C:\ Users \ HP \ Desktop \ program.py”,第12行,在中。 txt IndexError:列表索引超出范围 – khan

0

我能想到的唯一的办法就是创建一个同名的批处理文件,并在其中,调用所提供的参数,你的Python脚本。

使用批处理文件时,您不必指定扩展名(.bat),以使您更接近您想要的位置。

0

另外,没有任何编译.py来。 exe,你可以使你的脚本'可执行',这样如果你发出命令行如myscript param param,系统将搜索myscript.py并为你运行,就好像它是一个.exe.bat文件。

为了实现这一点,配置在计划运行脚本的机器:

  1. 确保您拥有文件关联设置(.py到Python解释,那就是,如果你双击在你的脚本资源管理器 - 它被执行)。通常这是由Python安装程序配置的。
  2. 编辑COMSPEC环境变量(往里属性),包括.PY扩展以及.EXE.COM
  3. 开始使用变量的新价值新cmd.exeStart菜单。任何程序的旧实例只会看到旧值。

如果您在同一台计算机上运行多个脚本,并且如果将脚本传播到多台计算机上,则此设置可能非常方便。在后一种情况下,您最好使用py2exe转换器将您的应用程序捆绑为一个自给自足的包(即使安装了python也不需要)。

相关问题