如何仅通过Windows命令行运行Python模块中的函数?
为了说明,我正在写的Python模块是我自己写的一个.py文件(叫做converter),而不是Python自带的库。
总之,我想让我的函数可以重载,也就是说,当我输入
converter file_name
时,它会把文件名发送到
def converter(file_name):
# do something
我在Google和StackOverflow上搜索了很久,但找不到不需要使用像$这样的特殊字符或像-c这样的命令行选项的方法。有没有人知道怎么做?
4 个回答
0
其实,你可以让你的脚本变得“可执行”,这样在命令行输入类似 myscript param param
的命令时,系统会自动找到 myscript.py
并运行它,就像运行一个 .exe
或 .bat
文件一样,而不需要把 .py
文件编译成 .exe
。
为了实现这个功能,你需要在你打算运行脚本的机器上进行一些设置:
- 确保你的文件关联设置正确,也就是把
.py
文件关联到 Python 解释器上。这样如果你在文件管理器中双击你的脚本,它就会被执行。通常情况下,这个设置在安装 Python 时会自动配置好。 - 编辑
COMSPEC
环境变量(可以在我的电脑
属性中找到)来包含.PY
扩展名,以及.EXE
、.COM
等等。 - 从
开始
菜单重新打开一个新的cmd.exe
窗口,这样才能使用新设置的变量值。之前打开的程序会继续使用旧的值。
这种设置在你在同一台机器上运行很多脚本时会很方便,但如果你把脚本分散到多台机器上,就不太方便了。在这种情况下,你最好使用 py2exe
转换工具,把你的应用打包成一个独立的包,这样就连 Python 都不需要安装了。
1
你可以在Windows的命令行中输入:
python converter.py file_name.txt
这样就可以把参数传递给Python里的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
我建议你使用像内置的argparse
(适用于2.7/3.2以上版本)或者argparse
在pypi上(适用于2.3以上版本),如果你需要处理很多复杂的命令行选项的话。
2
你可以使用类似于 PyInstaller 的工具,把你的 Python 文件(.py 文件)转换成一个可执行的程序(.exe 文件)。
在 Python 中使用这个工具时,可以这样写:
import sys
if __name__ == "__main__":
converter(sys.argv[1])