如何仅通过Windows命令行运行Python模块中的函数?

0 投票
4 回答
2205 浏览
提问于 2025-04-16 21:39

为了说明,我正在写的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

为了实现这个功能,你需要在你打算运行脚本的机器上进行一些设置:

  1. 确保你的文件关联设置正确,也就是把 .py 文件关联到 Python 解释器上。这样如果你在文件管理器中双击你的脚本,它就会被执行。通常情况下,这个设置在安装 Python 时会自动配置好。
  2. 编辑 COMSPEC 环境变量(可以在 我的电脑 属性中找到)来包含 .PY 扩展名,以及 .EXE.COM 等等。
  3. 开始 菜单重新打开一个新的 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])

撰写回答